OpenCV滑動條的使用詳解

OpenCV滑動條使用

滑動條在OpenCV是動態調節引數的一種特別好用的工具。比如邊緣檢測,閾值化,對比度和亮度調節等。它是在規定視窗顯示,並調節引數控制顯示影象。

OpenCV中滑動條使用步驟

滑動條還是很簡單的,以Canny()調節閾值演算法為例了。

1、建立視窗

用namedWindow()函式建立視窗。如:namedWindow(“邊緣檢測”,WINDOW_AUTOSIZE);

2、建立滑動條

createTrackbar()函式的各個引數可以參考相關書籍,這裡不再贅述。
這裡說一下值得注意的地方,
第一個引數是調節的引數名;
第二個引數是視窗名;即上步建立視窗名”邊緣檢測”,不要亂寫,否則不出現滑動條;
第三個引數是int *,即引數名取地址,如“&thresholds”;
第四個引數是調節引數最大值,可以直接數字表示;
第五個引數是回撥函式名,即調節的引數被那個函式使用,就調哪個函式。
如:cv::createTrackbar(“閾值:”,”邊緣檢測”,&thresholds,100,canny_track);

3、回撥函式

在createTrackbar()函式第五個引數是哪個,回撥函式就是哪個。例如:canny_track(0,0)。

4、書寫回撥函式

回撥函式編寫沒什麼好說的,值得注意兩點的是:
一、如果有產生新的影象,那麼新的影象變數名不能用之前的變數;如Canny(),結果影象要重新在回撥函式canny_track()中編寫。
二、如果要顯示影象,imshow()函式中的視窗名要跟第一步建立視窗名一致,如果不一致,那麼是滑動條和影象不在一個視窗顯示,可能其他情況會需要這種結果,就另說了。

給出程式碼

程式碼是給定一幅影象,Canny演算法檢測邊緣,變數thresholds是滑動條的引數。

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace std;
using namespace cv;
int thresholds=50;
Mat image,srcimage;
void canny_track(int ,void *)
{
Mat result;
Canny(srcimage,result,thresholds,thresholds*3,3);
imshow("邊緣檢測",result);
}
int main()
{
image=imread("C:\\Users\\Administrator\\Desktop\\image\\C.jpg");
if(!image.data)
{
return 0;
}
cvtColor(image,srcimage,CV_BGR2GRAY);
namedWindow("邊緣檢測",WINDOW_AUTOSIZE);
cv::createTrackbar("閾值:","邊緣檢測",&thresholds,100,canny_track);
canny_track(0,0);
waitKey(0);
return 0;
}

程式執行截圖

這裡寫圖片描述