早几天因为要考科目二和突然对记忆宫殿感兴趣就没有怎么更新了,对于opencv的一些用法有比较陌生,但是不虚,今天我的《opencv3编程入门》到了,就让我从第3章重新开始吧。
今天来个高级点的:滑动条的创建和使用
CV_EXPORTS int createTrackbar
( const string& trackbarname, //
const string& winname,//
int* value, //指向整型的指针,表示滑块的位置,可定义其初始值
int count,//滑块的最大值即0<=value<=count
TrackbarCallback onChange = 0,//回调函数
void* userdata = 0//
);
typedef void (CV_CDECL *TrackbarCallback)(int pos, void* userdata);
将大神的程序消化完后
Mat src1,src2,dst;
const int g_MaxAlpha=100;
double g_Alpha,g_Beta;
int g_AlphaSlider=70;//必须为整数
void on_Trackbar(int,void*)
{
g_Alpha=(double)g_AlphaSlider/g_MaxAlpha;//强制转化
g_Beta=1.0-g_Alpha;
addWeighted(src1,g_Alpha,src2,g_Beta,0.,dst);
//cout<<g_AlphaSlider<<endl;可以时时获取位置的值,
imshow("1",dst);
//waitkey(0);不能加在这,会影响函数的调用
}
bool Trackbar_addWeighted()
{
src1=imread("dota2_qop.jpg");
src2=imread("dota2_pom.jpg");
if (!src1.data&!src2.data)
{
printf("reading image error!!!");
return 0;
}
namedWindow("1");
char TrackbarName[50];
sprintf_s(TrackbarName,"透明值 %d",g_MaxAlpha);//这个函数有妙用
createTrackbar(TrackbarName,"1",&g_AlphaSlider,g_MaxAlpha,on_Trackbar);//第三个参数为向量形式
on_Trackbar(g_AlphaSlider,0);//必须回调,否则没有初值
return 1;
}
int main()
{
if(Trackbar_addWeighted())
cout<<"sucess"<<endl;
waitKey(0);
return 0;
}