OpenCV中没有实现按钮的功能,我们可以利用滑动条来实现按钮功能。
int createTrackerbar(const string& trackerbarname, const string winame, int* value, int count, TrackbarCallback onChange=0, void* userdata=0);
trackbarname
轨迹条的名字。
winname
窗口的名字,轨迹条会依附在这个窗口上。
value
一个指向整型的指针,表示滑块的位置,在创建时,滑块的初始位置就是该变量当前的值。
count
滑块可以达到的最大位置的值。滑块最小位置的值始终为0。
onchange
指向回调函数的指针,每次滑块位置改变时,这个函数都会进行回调。并且这个函数的原型必须为void XXXX(int,void*);其中第一个参数是轨迹条的位置,第二个参数是用户数据(本函数中参数userdata)。如果回调函数是NULL指针,则表示没有回调函数的调用,仅参数value有变化。
userdata
用户传给回调函数的数据,用来处理轨迹条事件。如果使用的value实参是全局变量,可以不去管userdata参数。
int getTrackbarPos(const string& trackbarname, const string& winname );
trackbarname
轨迹条的名字
winname
轨迹条的父窗口的名称
实例
下面的代码将wuli男神和wuli女神的图片混合在一起,输入图片如下:
wuliEddie1.jpg
wuliShishi.jpg
MixAlphaImages.cxx
#include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> #define WINDOW_NAME "Mixed Images" // global variables const int g_nMaxAlphaValue = 100; // maximun alpha value int g_nAlphaValueSlider; // value from trackbar double g_dAlphaValue; double g_dBetaValue; // Mat objects for images cv::Mat g_srcImage1; cv::Mat g_srcImage2; cv::Mat g_dstImage; // on trackbar 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); cv::imshow(WINDOW_NAME, g_dstImage); } // main int main( int argc, char** argv ) { // load image and show g_srcImage1 = cv::imread("wuliEddie1.jpg"); g_srcImage2 = cv::imread("wuliShishi1.jpg"); // NOTE: two image should be the same size if(!g_srcImage1.data) { printf("Error getting the first images. Put the image wuliEddie1.jpeg to Debug folder. \n"); return -1; } if(!g_srcImage1.data) { printf("Error getting the second images. Put the image wuliShishi1.jpeg to Debug folder. \n"); return -1; } // initialize trackbar value g_nAlphaValueSlider = 70; // create window cv::namedWindow(WINDOW_NAME, 1); // create trackbar char TrackbarName[50]; sprintf( TrackbarName, "Alpha Value %d", g_nMaxAlphaValue ); cv::createTrackbar( TrackbarName, WINDOW_NAME, &g_nAlphaValueSlider, g_nMaxAlphaValue, on_Trackbar ); // to show the initial image on_Trackbar(g_nAlphaValueSlider, 0); cv::waitKey(0); return 0; }
结果图
时间: 2024-10-24 21:54:27