接續上一篇<二值化灰階影像 Binarize a gray level image Using OpenCV 2.4.6 with Qt5>
將BinarizeQt5OpenCV246目錄夾複製一份
並另存成SplitRGBQt5OpenCV246
開啟專案SplitRGBQt5OpenCV246.pro
在menubar插入文字<檔案>, 接著插入<開啟圖片>,點選<開啟圖片>可以發現其動作函式指標名稱為actionD9
開啟mainwidow.h
在private slots: 新增一個callback function命名為 open()
開啟mainwidow.cpp
註冊動作事件ui->actionD9 與 open() 回呼函式建立關聯
撰寫open()回呼函式內容
移除及其callback function, 在mainwindow.cpp將on_pushButton_clicked()整個刪除
此外還要刪除其原本的定義,在mainwindow.h
執行測試<SplitRGBQt5OpenCV246_v1>是否修改成功
仿照open()範例, 依樣畫葫蘆新增addRGBNoise()
在mainwindow.cpp新增函數addRGBNoise()實作, 並將on_pushButton2_clicked()內容搬到addRGBNoise()內
對應<彩色雜訊>的QAction命名為 actionRGBNoise,並準備接著建立事件關聯至addRGBNoise()
mainwindow.cpp建立事件關聯至addRGBNoise()
執行測試<SplitRGBQt5OpenCV246_v2>是否修改成功
操作動畫:2013 10 15 Qt5如何手動建立Signal Slot
執行測試<SplitRGBQt5OpenCV246_v3>是否修改成功
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
新增三個頁面, 分別為R頻道, G頻道, B頻道
每頁加入Label元件以便顯示影像
在此輸入<取出RGB>並命名為actionExtractRGB
mainwindow.h
新增actionExtractRGB()事件處理函式
mainwindow.cpp
連結標籤(ui->actionExtractRGB)與事件處理函式( actionExtractRGB() )
mainwindow.h
新增planes 和輸出結果img_R_out, img_G_out, img_B_out
mainwindow.cpp
// 分別取出RGB
void MainWindow::actionExtractRGB()
{
ui->tabWidget->setCurrentIndex(6);
img_R_out.create(img_rgb.rows, img_rgb.cols);
img_G_out.create(img_rgb.rows, img_rgb.cols);
// Extracting Red(2) channel, which is equal to remove Blue(0) & Green(1) channels by subtracting 255
cv::split(img_rgb, planes);
planes[0]-=255;
planes[1]-=255;
cv::merge(planes, img_R_out);
QImage qimg_R = Mat2QImage(img_R_out); // Mat2QImage
imshow(ui->label_9, qimg_R); // 顯示影像
// Extracting Green channel, which is equal to remove Blue(0) & Red(2) channels by subtracting 255
cv::split(img_rgb, planes);
planes[0]-=255;
planes[2]-=255;
cv::merge(planes, img_G_out);
QImage qimg_G = Mat2QImage(img_G_out); // Mat2QImage
imshow(ui->label_10, qimg_G); // 顯示影像
// Extracting Blue(0) channel, which is equal to remove Green(1) & Red(2) channels by subtracting 255
cv::split(img_rgb, planes);
planes[1]-=255;
planes[2]-=255;
merge(planes, img_B_out);
QImage qimg_B = Mat2QImage(img_B_out); // Mat2QImage
imshow(ui->label_11, qimg_B); // 顯示影像
}
開啟一張影像RGB.jpg
R頻道
G頻道
B頻道
RGB2Gray
二值化門檻240
download sample code: SplitRGBQt5OpenCV246_v4
留言列表