遇到的问题
1.opencv的trackbarName有一些bug,传值string时会出现显示不正常的问题
2.指向函数的指针的用法是 返回类型 (*名称)(参数列表),如createTrackbar的第五个参数onChange(),数据类型为TrackbarCallback,官方文档给出的定义为typedef void(* cv::TrackbarCallback) (int pos, void *userdata), 表示指向形式为void f(int pos,void *userdata)的函数 3.userdata相当于事件处理函数中的EventArg参数,用来传递一些数据。实现代码
#include#include #include #include #include using namespace std;using namespace cv;const int MaxAlphaValue = 100;const string WindowName = "Alpha线性混合实现半透明效果";Mat srcImage1,srcImage2,dstImage;int alphaValue = 70;void error(const char *errorString) { cout << errorString << endl;}void onChange(int pos,void *userData){ double dAlpha = (double)alphaValue/MaxAlphaValue; double dBeta = 1 - dAlpha; addWeighted(srcImage1,dAlpha,srcImage2,dBeta,0,dstImage); imshow(WindowName,dstImage);}int main(){ srcImage1 = imread("flower.jpg"); srcImage2 = imread("leaf.jpg"); if(!srcImage1.data || !srcImage2.data) { error("flower.jpg or leaf.jpg not found!\n"); return -1; } //默认的WINDOW_AUTOSIZE不能手动调整窗口大小,设置为WINDOW_NORMAL可以手动调整 namedWindow(WindowName,WINDOW_NORMAL); //opencv在设置trackbarName这里有bug //代码若写成string trackbarName = "transparent value " + MaxAlphaValue; //会出现trackbarName显示不正常的问题 char trackbarName[50]; sprintf(trackbarName,"透明值 %d",MaxAlphaValue); //string trackbarName = "xxx " + MaxAlphaValue; createTrackbar(trackbarName,WindowName,&alphaValue,MaxAlphaValue,onChange,NULL); onChange(alphaValue,NULL); waitKey(0); return 0;}