接續之前一篇<二值化灰階影像 Binarize a gray level image Using OpenCV 2.4.6 with Qt5 >
這次打算寫一個即時調整門檻值並顯示對應二值化後的小圖
1. 在tabwidget插入一個頁面<參數>
2. 新增一個horizontalSlider
3. 新增一個lcdNumber, 用來即時顯示目前門檻值
4. 另外拉一個Form layout於該頁面下方(下圖紅色框框所示), 並拉一個label元件放進去,用來顯示小圖, 系統自動命名為label_3
首先, 如何顯示horizontalSlider值?
在mainwindow建構子(constructor)插入下列
connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),ui->lcdNumber,SLOT(display(int))); //顯示二值化門檻值
再來如果原始圖片超大張,如何至放置小圖顯示呢?
依樣畫葫蘆, 在mainwindow建構子(constructor)插入下列
ui->label_3->setScaledContents(true);//stretched效果
相反地, 如此一來會造成小圖被拉大, 成為奇怪的比例, 因此可以修改原來imshow的功能, 加入設定/不設定顯示大小
在ImageUtility.h
void imshow(QLabel* const label,const QImage& qimg,bool bResize); //顯示QImage影像(在QLabel)
在ImageUtility.cpp
//顯示影像
void imshow(QLabel* const label, const QImage& qimg, bool bResize)
{
label->move(0,0);
label->setPixmap(QPixmap::fromImage(qimg));
if(bResize)
label->resize(label->pixmap()->size());
}
-------------------------------------------------------------------------------------
修改原來二值化副程式
//二值化
void MainWindow::actionBinarize()
{
doubletic,toc,tcost;//計時開始,計時結束,花費時間
img_bin=img_gray.clone();//複製影像
tic=static_cast<double>(cv::getTickCount());//tic
int thresholded = ui->horizontalSlider->value();
cv::threshold(img_gray,img_bin, thresholded, 255, cv::THRESH_BINARY);
toc=static_cast<double>(cv::getTickCount());//toc
tcost=(toc-tic)/cv::getTickFrequency();//花費時間
QImageqimg_bin=Mat2QImage(img_bin);//Mat2QImage
imshow(ui->label,qimg_bin,0);//顯示影像(原始大圖)
imshow(ui->label_3,qimg_bin,1);//顯示影像(小圖)
scaleImage(1);
}
Youtube操作: 二值化門檻
-----------------------------------------------------------------------------------------------------------------------
mainwindow.cpp
在建構式加入下列
connect(ui->horizontalSlider_2, SIGNAL(valueChanged(int)), ui->lcdNumber_2, SLOT(display(int)));//彩色雜訊數量
Youtube操作: 彩色雜訊
Youtube操作: 灰階雜訊
留言列表