opencv:创建滑动条
函数原型:
int createTrackbar(conststring& trackbarname,conststring& winname,int* value,int count,TrackbarCallback onChange=0,void* userdata = 0);
#include <opencv.hpp> using namespace cv; #define WINDOW_NAME "线性混合示例" // 为窗口标题定义的宏 // ------------------ 全局变量声明部分 ------------------// const int g_nMaxAlphaValue = 100; // Alpha 的最大值 int g_nAlphaValueSlider; // 滑动条对应的变量 double g_dAlphaValue; double g_dBetaValue; // 声明图像的变量 // Mat g_srcImage1, g_srcImage2, g_dstImage; //======================================================// // ------------------- 响应滑动条的回调函数 ----------------- // void on_Trackbar(int, void*) { // 求出当前alpha值相对于最大值的比例 g_dAlphaValue = (double)g_nAlphaValueSlider / g_nMaxAlphaValue; // 则beta值为1减去alpha的值 g_dAlphaValue = (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(int argc, char** argv) { // 加载图像 两个图像的尺寸需要相同 g_srcImage1 = imread("1.jpg"); g_srcImage2 = imread("2.jpg"); if (!g_srcImage1.data){ printf("读取第一幅图片错误,请确定目录下是否有该图片存在\n"); return -1; } if (!g_srcImage2.data){ printf("读取第二幅图片错误,请确定目录下是否有该图片存在\n"); return -1; } // 设置滑动条初值为70 g_nAlphaValueSlider = 70; // 初始化默认的位置是70 //创建窗体 namedWindow(WINDOW_NAME, WINDOW_FULLSCREEN); //在创建的窗体中创建一个滑动条控件 char TrackbarName[50]; sprintf(TrackbarName, "透明值%d", g_nMaxAlphaValue); createTrackbar(TrackbarName,WINDOW_NAME,/*依附在该名字的窗口下*/ &g_nAlphaValueSlider/*当前的slider位置*/, g_nMaxAlphaValue/*最大值*/, on_Trackbar/*回调函数的名字*/); // 结果在回调函数中显示 on_Trackbar(g_nAlphaValueSlider, 0); //按任意键退出; waitKey(0); return 0; }
------------ 转载请注明出处 ------------