Opencv中的滑动条的创建和使用
Ps:素材来源:opencv编程,目的是记录自己的学习过程。
一,创建滑动条:createTrackbar()
1)createTrackbar()函数是用来创建一个具有特定名称和范围的轨迹条。
- 第一个参数,轨迹条的名字,用来代表我们创建的轨迹条。
- 第二个参数,窗口的名字,表示轨迹条会依附在哪个窗口上。
- 第三个参数,表示滑块的位置。
- 第四个参数,表示滑块可以达到的最大位置的值。
- 第五个参数,是指向回调函数的指针。
- 第六个参数,用户传给回调函数的数据,默认值为0,假如第三个参数是全局变量则可不用管。
createTrackbar函数使用的小例子
createTrackbar(“对比度:”,“【效果窗口】”,"&g_nContrastValue",“300”,on_Change)
二,createTrackbar()与 Canny结合的具体使用
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int thresholds = 50;
Mat image,srcimage;
void canny_track(int, void*)
{
Mat result;
Canny(srcimage, result, thresholds, thresholds * 3, 3);
imshow("边缘检测", result);
}
int main()
{
image = imread("dota.jpg");
if (!image.data)
{
return 0;
}
cvtColor(image, srcimage, COLOR_BGR2GRAY);
namedWindow("边缘检测", WINDOW_AUTOSIZE);
createTrackbar("阈值", "边缘检测", &thresholds, 300, canny_track);
waitKey(0);
return 0;
}
效果展示
三,一个完整的例子,演示如何用轨迹条来控制两幅图像的Alpha的混合
#include<opencv2/opencv.hpp>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;
#define WINDOW_NAME "[线性混合示例]" //窗口的宏定义
//--------------全局变量--------------//
const int g_nMaxAlphaValue = 100;//Alpha的最大值
//alpha通道是一个8位的灰度通道,2^8=256,该通道用256级灰度来记录图片中的透明信息,定义透明、不透明和半透明区域,其中白表示不透明,黑表示透明,灰表示半透明。
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_dBetaValue = (1 - 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.png");
g_srcimage2 = imread("2.png");
if (!g_srcimage1.data )
{
printf("第一张图片读取错误\n");
return -1;
}
if (!g_srcimage2.data)
{
printf("第二张图片读取错误\n");
return -1;
}
//设置滑动条的值为70
g_nAlphaValueSlider = 70;
//创建窗体
namedWindow(WINDOW_NAME,WINDOW_NORMAL );
//创建滑动条控件
char TrackbarName[50];
sprintf_s(TrackbarName, "透明值 %d", g_nMaxAlphaValue);
createTrackbar(TrackbarName, WINDOW_NAME, &g_nAlphaValueSlider, g_nMaxAlphaValue, on_Trackbar);
on_Trackbar(g_nAlphaValueSlider, 0);
waitKey(0);
return 0;
}
效果展示
图片资源: