转载自 毛星云 opencv3编程入门
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
cout << CV_VERSION << endl;
VideoCapture cam(0);
Mat frame;
Mat qrcode_img = imread("D:\\111.jpg");
cout << qrcode_img.cols << qrcode_img.rows << endl;
waitKey(0);
cam.set(CV_CAP_PROP_FOURCC, 'GPJM'); //小端写法
cam.set(CV_CAP_PROP_FRAME_WIDTH, 1920);
cam.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);
cam >> frame;
for (Rect roi(0, 0, qrcode_img.cols, qrcode_img.rows); waitKey(1) != 27; cam >> frame)
{
qrcode_img.copyTo(frame(roi));
imshow("frame", frame);
}
}
回调函数的使用:将函数名,作为地址,作为参数
createTrackbar(const string& trackbarName, const string& windowName, int* value, int countMax, TrackbarCallback oncharge = 0, void* userdata = 0)
每次滑动条位置改变,value值发生变化,反应当前的位置,并且回调 oncharge()函数
回调函数原型为 void XX(int, void*)
第一个参数为 轨迹条的位置 int* value
第二个参数为用户数据 void* userdata
回调函数不由该函数的实现方直接调用,而是在特定的事件或条件发生时,由另一方调用,用于对该事件进行响应。
#include <opencv2/opencv.hpp>
using namespace cv;
#define WINDOW_NAME "[混合线性示例]"
#define PIC "D:\\111.jpg"
const int g_nMaxAlphaValue = 100; //alpha 最大值
int g_nAlphaValueSlider; //滑动条对应的变量
double g_dAlphaValue;
double g_dBetaValue;
Mat g_srcImage1;
Mat g_srcImage2;
Mat g_dstImage;
void on_Trackbar(int, void*)
{
//求出当前alpha值相对于最大值的比例
g_dAlphaValue =(double)g_nAlphaValueSlider/g_nMaxAlphaValue;
//则当前beta值为:1- alpha
g_dBetaValue = (1.0- g_dAlphaValue);
//根据alpha和beta进行线性混和;
addWeighted(g_srcImage1,g_dAlphaValue,g_srcImage2,g_dBetaValue,0.0,g_dstImage);
//显示效果图
imshow(WINDOW_NAME,g_dstImage);
}
int main()
{
g_srcImage1 = imread(PIC);
g_srcImage2 = imread(PIC);
if(!g_srcImage1.data)
{
printf("读取第一幅图片错误,请确认目录下是否有imread函数指定图片存在! \n");
return -1;
}
if(!g_srcImage2.data)
{
printf("读取第一幅图片错误,请确认目录下是否有imread函数指定图片存在! \n");
return -1;
}
///设置滑动条初值为70
g_nAlphaValueSlider = 0;
//窗体h
namedWindow(WINDOW_NAME,1);
//在窗体中创建一个滑动条控件
char TrackbarName[50];
sprintf(TrackbarName,"透明度%d",g_nMaxAlphaValue);
createTrackbar(TrackbarName,WINDOW_NAME,&g_nAlphaValueSlider,g_nMaxAlphaValue,on_Trackbar);
//结果在回调函数中显示
on_Trackbar(g_nAlphaValueSlider,0);
waitKey(0);
return 0;
}