opencv学习(2)滑动条的创建和使用

来源:互联网 发布:淘宝网短袖男装 编辑:程序博客网 时间:2024/06/05 04:26

滑动条的创建和使用

#include<opencv2/opencv.hpp>#include"opencv2/highgui/highgui.hpp"using namespace cv;const String WINDOW_NAME = "【线性混合案例】";const int g_nMaxAlphaValue = 100;int g_nAlphaValueSlider;double g_dAlphaValue;double g_dBetaValue;//声明存储图像的变量Mat g_srcImage1;Mat g_srcImage2;Mat g_dstImage;void on_Trackbar(int, void*){    g_dAlphaValue = (double)g_nAlphaValueSlider / g_nMaxAlphaValue;    g_dBetaValue = 1.0 - g_dAlphaValue;    addWeighted(g_srcImage1, g_dAlphaValue, g_srcImage2, g_dBetaValue, 0.0, g_dstImage);    imshow(WINDOW_NAME,g_dstImage);}int main(int argc, char** argv){    g_srcImage1 = imread("3.jpg");    g_srcImage2 = imread("4.jpg");    resize(g_srcImage1,g_srcImage1,Size(640, 640), 0, 0, CV_INTER_LINEAR);    resize(g_srcImage2, g_srcImage2, Size(640, 640), 0, 0, CV_INTER_LINEAR);    if (!g_srcImage1.data){ printf("读取第一张照片有误"); return-1; }    if (!g_srcImage2.data){ printf("读取第二张照片有误"); return-1; }    g_nAlphaValueSlider = 70;    namedWindow(WINDOW_NAME,1);    //在创建的窗体中创建一个滑动条控制    char TrackbarName[50];    sprintf(TrackbarName, "透明值 %d", g_dAlphaValue);//把格式化的数据写入某个字符串缓冲区    createTrackbar(TrackbarName,WINDOW_NAME,&g_nAlphaValueSlider,g_nMaxAlphaValue,on_Trackbar);    on_Trackbar(g_nAlphaValueSlider, 0);    waitKey(0);    return 0;}

备注:
(1)创建滑动条:createTrackbar( )函数;往往会跟一个回调函数配合起来使用

 int careateTrackbar(conststring& trackbarname,constring& winname, int* value,int count,TrackbarCallback onChange=0,void* userdata=0 )

第一个参数 【轨迹条的名字】
第二个参数【窗口的名字】
第三个参数,int*类型的value,是一个指向整型的指针,表示滑块的位置。
第四个参数,表示滑块能够达到的最大位置的值;
第五个参数,TrackbarCallback类型的onChange,它有默认值0;这是一个指向回调函数的指针,每次滑块位置改变时,这个函数就会进行回调。
第六个参数,void*类型的userdata,它有默认值0.这个参数是用户传给回调函数的数据,用来处理轨迹条事件。
【回调函数】就是一个通过函数指针调用的函数。如果我们把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,就称为回调函数。
(2) resize()函数;将两幅将要合成的图像尺寸变为指定的大小。

resize(g_srcImage1,g_srcImage1,Size(640, 640), 0, 0, CV_INTER_LINEAR);

(3)sprintf()函数,把格式化的数据写入摸个字符串缓冲区;

0 0