OpenCV createTrackbar() 滑动条创建使用简单线性混合
函数原型:
int createTrackbar(const string & trackbarname, const string & winname, int *value, int count, TrackbarCallback onChange=0, void *userdata=0);
- 第一个参数:轨迹条的名字,用来代表我们创建的轨迹条;
- 第二个参数:窗口名字,表示轨迹条会依附到哪个窗口上,即对应 nameWindow()创建的某一个窗口;
- 第三个参数:滑块的位置,创建时的初始位置就是其当前值;
- 第四个参数:滑块的最大值,最小值始终位 0;
- 第五个参数:回调函数指针,每次滑块位置改变时,这个函数都会进行回调,这个函数的原型必须是
void XXXX(int, void*)
,第一个参数:轨迹条的位置,第二个参数:用户数据(下面的第6个参数);如果位 NULL 指针,表示没有回调函数调用,仅第三个参数 value 有变化; - 第六个参数:这个是用户传给回调函数的参数,如果第三个参数是全局变量的话,可以不用管这个 userdata(函数内部可以直接访问全局变量,不用传值)。
示例代码用的是全局变量:
#include <opencv2/opencv.hpp>
#include "opencv2/highgui/highgui.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;
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(int argc, char** argv)
{
g_srcImage1 = imread(".//image3_2_1//1.jpg");
g_srcImage2 = imread(".//image3_2_1//2.jpg");
if (!g_srcImage1.data) {
printf("图像1读取错误,请确定路径下是否存在图片!\n");
return -1;
}
if (!g_srcImage2.data) {
printf("图像2读取错误,请确定路径下是否存在图片!\n");
return -1;
}
g_nAlphaValueSlider = 70; // 设定滑动条初始值 70
namedWindow(WINDOW_NAME, 1); // 创建窗体
// 在创建的窗体中创建一个滑动条控件
char TrackbaName[50];
sprintf_s(TrackbaName, "透明值 %d", g_nMaxAlphaValue);
createTrackbar(TrackbaName, WINDOW_NAME, &g_nAlphaValueSlider, g_nMaxAlphaValue, on_Trackbar);
// 结果在回调函数中显示
on_Trackbar(g_nAlphaValueSlider, NULL);
waitKey(0);
return 0;
}
▲ 两张图混合在一起
getTrackbarPos() 函数
获取当前轨迹的位置。
原型:
int getTrackbarPos(const string &trackbarname, const string &winname);
- 第一个参数: 轨迹条的名字;
- 第二个参数: 轨迹条父窗口的名称;
参考:
《OpenCV3 编程入门》 毛星云 P75
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了