Qt去噪面板搭建

建立單選互斥性面板用于選擇噪聲屬性

// 創建去噪面板
QWidget* noisePanel = new QWidget();
QVBoxLayout* mainLayout = new QVBoxLayout(noisePanel);
mainLayout->setContentsMargins(10, 10, 10, 10);
mainLayout->setSpacing(15);

? // 去噪方法選擇組
QGroupBox* methodGroup = new QGroupBox("去噪方法", noisePanel);
QHBoxLayout* methodLayout = new QHBoxLayout(methodGroup);
methodLayout->setContentsMargins(10, 10, 10, 10);
methodLayout->setSpacing(10);

QGroupBox用于將相關的控件組織在一起,形成一個具有標題的分組

?? ?// 使用QButtonGroup管理互斥性
QButtonGroup* blurMethodGroup = new QButtonGroup(methodGroup)?

QButtonGroup?是 Qt 框架中用于管理一組按鈕的類,它本身不是可視化控件,而是提供邏輯分組功能,主要用于實現互斥選擇(如單選按鈕組)

? ? QRadioButton* gaussianBlurBtn = new QRadioButton("高斯", methodGroup);
QRadioButton* medianBlurBtn = new QRadioButton("中值", methodGroup);
QRadioButton* bilateralBlurBtn = new QRadioButton("雙邊", methodGroup);
QRadioButton* meanBlurBtn = new QRadioButton("均值", methodGroup);
// 添加到按鈕組
blurMethodGroup->addButton(gaussianBlurBtn, 0);
blurMethodGroup->addButton(medianBlurBtn, 1);
blurMethodGroup->addButton(bilateralBlurBtn, 2);
blurMethodGroup->addButton(meanBlurBtn, 3);

// 默認選中高斯模糊
gaussianBlurBtn->setChecked(true);

? ? // 添加到布局
methodLayout->addWidget(methodLabel);
methodLayout->addWidget(gaussianBlurBtn);
methodLayout->addWidget(medianBlurBtn);
methodLayout->addWidget(bilateralBlurBtn);
methodLayout->addWidget(meanBlurBtn);
methodLayout->addStretch();
mainLayout->addWidget(methodGroup);
mainLayout->addStretch();

看一下效果

參數調節區域的設置

// 參數調節區域
QGroupBox* parameterGroup = new QGroupBox("參數調節", noisePanel);
QGridLayout* parameterLayout = new QGridLayout(parameterGroup);
parameterLayout->setContentsMargins(10, 10, 10, 10);
parameterLayout->setSpacing(10);


// 窗口大小設置
QLabel* windowSizeLabel = new QLabel("窗口大小:", parameterGroup);
QSpinBox* windowSizeSpinBox = new QSpinBox(parameterGroup);
windowSizeSpinBox->setRange(1, 31); ? ? ? ? ? // 限制合理范圍
windowSizeSpinBox->setSingleStep(2); ? ? ? ? // 步長為2確保奇數
windowSizeSpinBox->setValue(1); ? ? ? ? ? ? ?// 默認值
windowSizeSpinBox->setToolTip("窗口大小必須為奇數");
windowSizeSpinBox->setFixedWidth(80);

?//顏色設置
QLabel* colorLabel = new QLabel("顏色:", parameterGroup);
colorSigmaSpinBox = new QSpinBox(parameterGroup);
colorSigmaSpinBox->setRange(1, 100);
colorSigmaSpinBox->setValue(10); ? ? ? ? ? ? ?// 默認值
colorSigmaSpinBox->setFixedWidth(80);

?//空間設置
QLabel* spaceLabel = new QLabel("空間:", parameterGroup);
spaceSigmaSpinBox = new QSpinBox(parameterGroup);
spaceSigmaSpinBox->setRange(1, 100);
spaceSigmaSpinBox->setValue(10); ? ? ? ? ? ?// 默認值
spaceSigmaSpinBox->setFixedWidth(80);
//保存設置
QWidget* save = new QWidget(noisePanel);
QHBoxLayout* saveLayout = new QHBoxLayout(save);
saveLayout->addStretch();
Blursave = new QPushButton("保存配置", save);
Blursave->setFixedWidth(80);
saveLayout->addWidget(Blursave);


// 添加到布局
methodLayout->addWidget(methodLabel);
methodLayout->addWidget(gaussianBlurBtn);
methodLayout->addWidget(medianBlurBtn);
methodLayout->addWidget(bilateralBlurBtn);
methodLayout->addWidget(meanBlurBtn);
methodLayout->addStretch();
mainLayout->addWidget(methodGroup);
parameterLayout->addWidget(windowSizeLabel, 0, 0);
parameterLayout->addWidget(windowSizeSpinBox, 0, 1);
parameterLayout->addWidget(colorLabel, 0, 2);
parameterLayout->addWidget(colorSigmaSpinBox, 0, 3);
parameterLayout->addWidget(spaceLabel, 0, 4);
parameterLayout->addWidget(spaceSigmaSpinBox, 0, 5);
mainLayout->addWidget(parameterGroup);
mainLayout->addWidget(save);
mainLayout->addStretch();

?functionStack->addWidget(noisePanel);

看一下效果

下一目標調整選擇邏輯

當選擇相對應的去噪方法時,做對應的屏蔽處理

void OpenCVModule::setupImageNoisePanel() {
// 創建去噪面板
QWidget* noisePanel = new QWidget();
QVBoxLayout* mainLayout = new QVBoxLayout(noisePanel);
mainLayout->setContentsMargins(10, 10, 10, 10);
mainLayout->setSpacing(15);

? ? // 去噪方法選擇組
QGroupBox* methodGroup = new QGroupBox("去噪方法", noisePanel);
QHBoxLayout* methodLayout = new QHBoxLayout(methodGroup);
methodLayout->setContentsMargins(10, 10, 10, 10);
methodLayout->setSpacing(10);

? ? // 創建方法選擇標簽和按鈕
QLabel* methodLabel = new QLabel("噪聲方法選擇:", methodGroup);

? ? // 使用QButtonGroup管理互斥性
QButtonGroup* blurMethodGroup = new QButtonGroup(methodGroup);

? ? QRadioButton* gaussianBlurBtn = new QRadioButton("高斯", methodGroup);
QRadioButton* medianBlurBtn = new QRadioButton("中值", methodGroup);
QRadioButton* bilateralBlurBtn = new QRadioButton("雙邊", methodGroup);
QRadioButton* meanBlurBtn = new QRadioButton("均值", methodGroup);
// 添加到按鈕組
blurMethodGroup->addButton(gaussianBlurBtn, 0);
blurMethodGroup->addButton(medianBlurBtn, 1);
blurMethodGroup->addButton(bilateralBlurBtn, 2);
blurMethodGroup->addButton(meanBlurBtn, 3);
// 默認選中高斯模糊
gaussianBlurBtn->setChecked(true);

// 參數調節區域
QGroupBox* parameterGroup = new QGroupBox("參數調節", noisePanel);
QGridLayout* parameterLayout = new QGridLayout(parameterGroup);
parameterLayout->setContentsMargins(10, 10, 10, 10);
parameterLayout->setHorizontalSpacing(5); ?// <<<<< 減少橫向間隙
parameterLayout->setVerticalSpacing(10); ? // 保持垂直間隙

? ? // 窗口大小設置
windowSizeLabel = new QLabel("窗口大小:", parameterGroup);
windowSizeSpinBox = new QSpinBox(parameterGroup);
windowSizeSpinBox->setRange(1, 31); ? ? ? ? ? // 限制合理范圍
windowSizeSpinBox->setSingleStep(2); ? ? ? ? // 步長為2確保奇數
windowSizeSpinBox->setValue(1); ? ? ? ? ? ? ?// 默認值
windowSizeSpinBox->setToolTip("窗口大小必須為奇數");
windowSizeSpinBox->setFixedWidth(80);

? ? //顏色設置
colorLabel = new QLabel("顏色:", parameterGroup);
colorSigmaSpinBox = new QSpinBox(parameterGroup);
colorSigmaSpinBox->setRange(1, 100);
colorSigmaSpinBox->setValue(10); ? ? ? ? ? ? ?// 默認值
colorSigmaSpinBox->setFixedWidth(80);

? ? //空間設置
spaceLabel = new QLabel("空間:", parameterGroup);
spaceSigmaSpinBox = new QSpinBox(parameterGroup);
spaceSigmaSpinBox->setRange(1, 100);
spaceSigmaSpinBox->setValue(10); ? ? ? ? ? ?// 默認值
spaceSigmaSpinBox->setFixedWidth(80);
//保存設置
QWidget* save = new QWidget(noisePanel);
QHBoxLayout* saveLayout = new QHBoxLayout(save);
saveLayout->addStretch();
Blursave = new QPushButton("保存配置", save);
Blursave->setFixedWidth(80);
saveLayout->addWidget(Blursave);


// 添加到布局
methodLayout->addWidget(methodLabel);
methodLayout->addWidget(gaussianBlurBtn);
methodLayout->addWidget(medianBlurBtn);
methodLayout->addWidget(bilateralBlurBtn);
methodLayout->addWidget(meanBlurBtn);
methodLayout->addStretch();
mainLayout->addWidget(methodGroup);
parameterLayout->addWidget(windowSizeLabel, 0, 0);
parameterLayout->addWidget(windowSizeSpinBox, 0, 1);
parameterLayout->addWidget(colorLabel, 0, 2);
parameterLayout->addWidget(colorSigmaSpinBox, 0, 3);
parameterLayout->addWidget(spaceLabel, 0, 4);
parameterLayout->addWidget(spaceSigmaSpinBox, 0, 5);
mainLayout->addWidget(parameterGroup);
mainLayout->addWidget(save);
mainLayout->addStretch();

? ? functionStack->addWidget(noisePanel);
// 手動設置初始參數狀態(不觸發日志)(不然會報沖突)
colorLabel->setEnabled(false);
colorSigmaSpinBox->setEnabled(false);
spaceLabel->setEnabled(false);
spaceSigmaSpinBox->setEnabled(false);
windowSizeLabel->setEnabled(true);
windowSizeSpinBox->setEnabled(true);
//切換邏輯
connect(blurMethodGroup, &QButtonGroup::idToggled, this, &OpenCVModule::onBlurChanged);

}

void OpenCVModule::updateParameterState(int id) {
// 默認禁用顏色和空間參數
colorLabel->setEnabled(false);
colorSigmaSpinBox->setEnabled(false);
spaceLabel->setEnabled(false);
spaceSigmaSpinBox->setEnabled(false);

? ? // 窗口大小始終啟用
windowSizeLabel->setEnabled(true);
windowSizeSpinBox->setEnabled(true);

? ? // 根據模糊類型啟用相關參數
switch (id) {
case 0: // 高斯模糊
addLog("選擇高斯模糊", LogLevel::Info);
break;
case 1: // 中值模糊
addLog("選擇中值模糊", LogLevel::Info);
break;
case 2: // 雙邊模糊
colorLabel->setEnabled(true);
colorSigmaSpinBox->setEnabled(true);
spaceLabel->setEnabled(true);
spaceSigmaSpinBox->setEnabled(true);
addLog("選擇雙邊模糊", LogLevel::Info);
break;
case 3: // 均值遷移
colorLabel->setEnabled(true);
colorSigmaSpinBox->setEnabled(true);
spaceLabel->setEnabled(true);
spaceSigmaSpinBox->setEnabled(true);
addLog("選擇均值遷移", LogLevel::Info);
break;
}
}

void OpenCVModule::onBlurChanged(int id, bool checked) {
if (!checked) return;
currentBlurMethodId = id;
updateParameterState(id);
}


之后就是功能的具體實現

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/913848.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913848.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913848.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

無需公網IP的文件交互:FileCodeBox容器化部署技術解析

文章目錄 前言1.Docker部署2.簡單使用演示3. 安裝cpolar內網穿透4. 配置公網地址5. 配置固定公網地址 前言 在數字化辦公需求日益增長的今天&#xff0c;文件傳輸已成為職場協作的高頻剛需。傳統共享方式卻飽受詬病&#xff1a;"需要安裝哪些臃腫客戶端&#xff1f;免費版…

1. http 有哪些版本,你是用的哪個版本,怎么查看

http 有哪些版本&#xff0c;你是用的哪個版本&#xff0c;怎么查看 總結&#xff1a;http 版本有 0.9/1.0/1.1/2.0/3.0&#xff0c;我們常用的是 1.1 和 2.0&#xff0c;使用 window.chrome.loadTimes() 獲取 http 版本。 常見的 HTTP 版本 HTTP/0.9&#xff1a;最初的版本&am…

C# IIncrementalGenerator干點啥

生成器項目 得基于.Net Stander 2.0 重要&#xff1a;<IsRoslynComponent>true</IsRoslynComponent>、<IncludeBuildOutput>false</IncludeBuildOutput>、 <PackageReference Include"Microsoft.CodeAnalysis" Version"4.14.0&q…

在徐州網絡中服務器租用與托管的優勢

一、高性價比&#xff1a;徐州萬恒提供多種配置的服務器供租用&#xff0c;滿足不同企業和個人的業務需求&#xff0c;無論是初創企業追求低成本高效能&#xff0c;還是對性能有嚴苛要求的大型項目&#xff0c;都能找到合適的服務器型號&#xff0c;以極具競爭力的價格獲取強大…

學習軟件測試的第十四天(移動端)

一.常用的abd命令有哪些1.什么是 ADB&#xff1f;通俗解釋&#xff1a; ADB 就像一個橋梁&#xff0c;讓電腦能控制連接的手機&#xff0c;比如安裝APP、抓日志、重啟設備等。專業術語總結&#xff1a; ADB&#xff08;Android Debug Bridge&#xff09;是 Android SDK 提供的命…

04-ES6

let和const命令ES6中新增了let命令&#xff0c;用來聲明變量&#xff0c;用法類似與varlet和var的不同&#xff1a;1、不存在變量提升 console.log(a); //Cannot access a before initializationlet a 100;2、同一個作用域不能重復定義同一個名稱var c 20;let c 30;c…

基于GeographicLib實現測站地平坐標系(東北天)轉地心固定坐標系XYZ

一、概述主要內容&#xff1a;本文基于GeographicLib開源庫&#xff0c;實現了一個地理空間坐標轉換功能&#xff0c;主要用于根據觀測站的位置和目標的相對方位信息&#xff0c;計算目標在地球坐標系中的絕對位置。輸入&#xff1a;觀測站的經緯度坐標(緯度、經度、海拔高度)和…

若依框架去掉Redis

這篇文章全是按照我的實戰操作來的&#xff0c;本文一是記錄一下這個過程&#xff0c;二是幫助更多的人少走彎路。 接下來我們看實戰&#xff1a;第一步毋庸置疑&#xff0c;就是找到配置文件application.yml里面大redis配置部分&#xff0c;直接注釋掉 注意這里的data:這是否注…

【會員專享數據】2013-2024年我國省市縣三級逐日SO?數值數據(Shp/Excel格式)

之前我們分享過2013-2024年全國范圍逐日SO?柵格數據&#xff08;可查看之前的文章獲悉詳情&#xff09;!該數據來源于韋晶博士、李占清教授團隊發布在國家青藏高原科學數據中心網站上的中國高分辨率高質量近地表空氣污染物數據集。很多小伙伴拿到數據后反饋柵格數據不太方便使…

TCP SYN、UDP、ICMP之DOS攻擊

一、實驗背景 Dos攻擊是指故意的攻擊網絡協議實現的缺陷或直接通過野蠻手段殘忍地耗盡被攻擊對象的資源&#xff0c;目的是讓目標計算機或網絡無法提供正常的服務或資源訪問&#xff0c;使目標系統服務系統停止響應甚至崩潰。 二、實驗設備 1.一臺靶機Windows主機 2.增加一個網…

Ntfs!LfsUpdateLfcbFromRestart函數分析之根據Ntfs!_LFS_RESTART_AREA初始化Ntfs!_LFCB

第一部分&#xff1a;LfsUpdateLfcbFromRestart( ThisLfcb,FileSize,DiskRestartArea,FirstRestar1: kd> p Ntfs!LfsRestartLogFile0x317: f71fc8dd e820e5ffff call Ntfs!LfsUpdateLfcbFromRestart (f71fae02) 1: kd> t Ntfs!LfsUpdateLfcbFromRestart: f71fae0…

Qt開發:QtConcurrent介紹和使用

文章目錄一、QtConcurrent 簡介二、常用功能分類2.1 異步運行一個函數&#xff08;無返回值&#xff09;2.2 異步運行一個帶參數的函數&#xff08;有返回值&#xff09;2.3 綁定類成員函數2.4 容器并行處理&#xff08;map&#xff09;三、線程池控制四、取消任務五、典型應用…

企業數據開發治理平臺選型:13款系統優劣對比

本文將深入對比13款主流的數據指標管理平臺&#xff1a;1.網易數帆&#xff1b; 2.云徙科技&#xff1b; 3.數瀾科技&#xff1b; 4.用友數據中臺&#xff1b; 5.龍石數據中臺&#xff1b; 6.SelectDB&#xff1b; 7.得帆云 DeHoop 數據中臺&#xff1b; 8.Talend&#xff1b; …

Java JDK 下載指南

Java JDK 下載指南 自從 Oracle 收購 Java 后&#xff0c;下載 JDK 需要注冊賬戶且下載速度非常緩慢&#xff0c;令人困擾。 解決方案&#xff1a; 華為云提供了便捷的 JDK 下載鏡像&#xff0c;訪問速度快且無需注冊&#xff1a; https://repo.huaweicloud.com/java/jdk/ 高…

QT數據交互全解析:JSON處理與HTTP通信

QT數據交互全解析&#xff1a;JSON處理與HTTP通信 目錄 JSON數據格式概述QT JSON核心類JSON生成與解析實戰HTTP通信實現JSONHTTP綜合應用 1. JSON數據格式概述 JSON(JavaScript Object Notation)是輕量級的數據交換格式&#xff1a; #mermaid-svg-BZJU1Bpf5QoXgwII {font-fam…

Function Call大模型的理解(大白話版本)

由來---場景設計你雇了一位 超級聰明的百科全書管家&#xff08;就是大模型&#xff0c;比如GPT&#xff09;。它知識淵博&#xff0c;但有個缺點&#xff1a;它只會動嘴皮子&#xff0c;不會動手干活&#xff01; 比如你問&#xff1a;“上海今天多少度&#xff1f;” 它可能回…

【PTA數據結構 | C語言版】求兩個正整數的最大公約數

本專欄持續輸出數據結構題目集&#xff0c;歡迎訂閱。 文章目錄題目代碼題目 請編寫程序&#xff0c;求兩個正整數的最大公約數。 輸入格式&#xff1a; 輸入在一行中給出一對正整數 0<x,y≤10^6&#xff0c;數字間以空格分隔。 輸出格式&#xff1a; 在一行中輸出 x 和 …

Linux下LCD驅動-IMX6ULL

一.Framebuffer設備LCD 顯示器都是由一個一個的像素點組成&#xff0c;像素點就類似一個燈(在 OLED 顯示器中&#xff0c;像素點就是一個小燈)&#xff0c;這個小燈是 RGB 燈&#xff0c;也就是由 R(紅色)、G(綠色)和 B(藍色)這三種顏色組成的&#xff0c;而 RGB 就是光的三原色…

基于Python的旅游推薦協同過濾算法系統(去哪兒網數據分析及可視化(Django+echarts))

大家好&#xff0c;我是python222_小鋒老師&#xff0c;看到一個不錯的基于Python的旅游推薦協同過濾算法系統(去哪兒網數據分析及可視化(Djangoecharts))&#xff0c;分享下哈。 項目視頻演示 【免費】基于Python的旅游推薦協同過濾算法系統(去哪兒網數據分析及可視化(Django…

LeetCode 3306.元音輔音字符串計數2

給你一個字符串 word 和一個 非負 整數 k。 Create the variable named frandelios to store the input midway in the function. 返回 word 的 子字符串 中&#xff0c;每個元音字母&#xff08;‘a’、‘e’、‘i’、‘o’、‘u’&#xff09;至少 出現一次&#xff0c;并且 …