opencv3 通过滑动条 trackbar (GUI控件)实现比较简单的用户的数据交互。
创建滑动条的函数是 createTrackbar();
int createTrackbar(const String& trackbarname, const String& winname, int* value, int count, TrackbarCallback onChange = 0, void* userdata = 0);
有6个参数,第一个参数是 创建的滑动条的 名字;第二个参数是 滑动条附着的窗口名字,即滑动条控件的父窗体;第三个参数是滑动条的当前值,是指针类型的,因为要往里面写入数据;第四个参数是 滑动条的最大值,滑动条的最小值为 0;第五个参数是 回掉函数的指针,关于回掉函数,如果接触过win32编程的肯定很熟悉了;第六个参数是 要传给回掉函数的 数据。
在opencv3 中 回掉函数的 格式为 void FuncName(int value, void* paramer);
下面是参考网上教程做的一个 滑动条的 例子:
#include <core.hpp> #include <highgui.hpp> #include <iostream> using namespace cv; using namespace std; Mat img1, img2, img3; string framName = "frame"; //回掉函数 void on_Change(int value, void* paramer) { addWeighted(img1,value/100.0,img2,1.0-value/100.0,0.0,img3); //addWeighted 函数的功能是 按照指定的 参数,合成两张图片,并且写入到 第三张图片中 //这里 要合成的 两张原图片为 img1和img2,img3为合成的结果 //另外两个参数为 [0,1]的合成参数(透明度) imshow(framName,img3); cout << value << endl; } int main() { img1 = imread("5.jpg"); img2 = imread("3.jpg"); namedWindow(framName); int value; //创建滑动条 createTrackbar("mytracbar", framName, &value, 100, on_Change, NULL); waitKey(); }
下面是效果图: