C/C++ OpenCV滑动条的创建与使用
2017-01-09 16:52
288 查看
滑动条(Trackbar)是Opencv动态调节参数的一个工具,他依附于窗口存在
创建滑动条:createTrackbar()
int createTrackbar(
const string& trackbarname,
const string& winname,
int *value,
int count,
TrackbarCallback onCahnge=0,
void* userdata=0)
第一个参数:const string&类型的trackbarname,轨迹条的名字,用来代表我们创建的轨迹条
第二个参数:窗口名,表示这个轨迹条依附到哪个窗口上,即对应namedWindow()创建时窗口填的窗口名
第三个参数:int*类型的value,一个指向整形的指针,表示滑块的位置,在创建时,滑块的初始位置就是该变量的值。
第四个参数:int类型的count,表示滑块可以到达的最大位置的值,滑块最小位置的值始终是0
第五个参数:回调函数,这个函数必须是void XXX(int,void*)其中第一个参数是轨迹的位置,第二个参数是用户数据。
第六个参数:void*类型的userdata,默认为0,这个参数是用户传递给回调函数的数据,三国第三个使用全局变量的话,这个参数省略
下面是代码:
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
#define WINDOW_NAME "线性混合"
//变量声明
const int g_nMaxAlphaValue = 100; //Alpha的最大值
int g_nAlphaValuesSlider; //滑动条对应的变量
double g_dAlpaValue;
double g_dBetaValue;
//声明存储图像的变量
Mat g_srcImage1;
Mat g_srcImage2;
Mat g_dstImage;
//响应滑动条的回调函数
void on_Trackbar(int, void *)
{
//求出当前alpha值对于最大值的比例
g_dAlpaValue = (double)g_nAlphaValuesSlider / g_nMaxAlphaValue;
//求出第二张图片的权重
g_dBetaValue = (1.0 - g_dAlpaValue);
//线性混合
addWeighted(g_srcImage1, g_dAlpaValue, g_srcImage2, g_dBetaValue, 0.0, g_dstImage);
//显示效果图
imshow(WINDOW_NAME, g_dstImage);
}
int main()
{
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;
}
//设置滑动条的初始位置
g_nAlphaValuesSlider = 50;
//创建窗体
namedWindow(WINDOW_NAME);
//在创建窗体中创建一个滑动条
char TranckbarName[50] = "透明值100";
createTrackbar(TranckbarName, WINDOW_NAME, &g_nAlphaValuesSlider, g_nMaxAlphaValue, on_Trackbar);
on_Trackbar(g_nAlphaValuesSlider, 0);
waitKey();
return 0;
}
文件目录:
运行结果:
创建滑动条:createTrackbar()
int createTrackbar(
const string& trackbarname,
const string& winname,
int *value,
int count,
TrackbarCallback onCahnge=0,
void* userdata=0)
第一个参数:const string&类型的trackbarname,轨迹条的名字,用来代表我们创建的轨迹条
第二个参数:窗口名,表示这个轨迹条依附到哪个窗口上,即对应namedWindow()创建时窗口填的窗口名
第三个参数:int*类型的value,一个指向整形的指针,表示滑块的位置,在创建时,滑块的初始位置就是该变量的值。
第四个参数:int类型的count,表示滑块可以到达的最大位置的值,滑块最小位置的值始终是0
第五个参数:回调函数,这个函数必须是void XXX(int,void*)其中第一个参数是轨迹的位置,第二个参数是用户数据。
第六个参数:void*类型的userdata,默认为0,这个参数是用户传递给回调函数的数据,三国第三个使用全局变量的话,这个参数省略
下面是代码:
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
#define WINDOW_NAME "线性混合"
//变量声明
const int g_nMaxAlphaValue = 100; //Alpha的最大值
int g_nAlphaValuesSlider; //滑动条对应的变量
double g_dAlpaValue;
double g_dBetaValue;
//声明存储图像的变量
Mat g_srcImage1;
Mat g_srcImage2;
Mat g_dstImage;
//响应滑动条的回调函数
void on_Trackbar(int, void *)
{
//求出当前alpha值对于最大值的比例
g_dAlpaValue = (double)g_nAlphaValuesSlider / g_nMaxAlphaValue;
//求出第二张图片的权重
g_dBetaValue = (1.0 - g_dAlpaValue);
//线性混合
addWeighted(g_srcImage1, g_dAlpaValue, g_srcImage2, g_dBetaValue, 0.0, g_dstImage);
//显示效果图
imshow(WINDOW_NAME, g_dstImage);
}
int main()
{
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;
}
//设置滑动条的初始位置
g_nAlphaValuesSlider = 50;
//创建窗体
namedWindow(WINDOW_NAME);
//在创建窗体中创建一个滑动条
char TranckbarName[50] = "透明值100";
createTrackbar(TranckbarName, WINDOW_NAME, &g_nAlphaValuesSlider, g_nMaxAlphaValue, on_Trackbar);
on_Trackbar(g_nAlphaValuesSlider, 0);
waitKey();
return 0;
}
文件目录:
运行结果:
相关文章推荐
- <opencv>滑动条的创建与使用
- OpenCV学习记录 滑动条得创建和使用
- opencv3笔记一 滑动条的创建与使用
- opencv中滑动条的创建与使用
- opencv学习(2)滑动条的创建和使用
- opencv学习笔记——滑动条的创建和使用
- opencv滑动条的创建和使用
- 【OpenCV笔记 02】OpenCV滑动条的创建和使用——createTrackbar()函数
- OpenCV学习之旅——滑动条的创建和使用
- Opencv滑动条的创建和使用
- C++使用gsoap创建webService
- 在VC6.0中创建和使用静态链接库&amp;amp;&amp;amp;C如何调用C++ 成员函数
- 第05章 CORE C++_对象的创建和使用_继承_多态_析构_xxx_cast_友元_只读成员_静态成员_多重继承_虚继承_内部类
- Visaul C++ 6.0创建并使用DLL
- 使用NetBeans C/C++ Pack 5.5 创建程序(二)
- Linux下通用线程池的创建与使用 C++
- 创建和使用动态链接库 (C++)
- 仿MFC实现c++按名动态创建对象之续(瘦身以及解决其在dll中使用的问题)
- Windows编程 C++ DLL编程 学习笔记(一)静态链接库的创建和使用
- 使用NetBeans C/C++ Pack 5.5 创建程序(二)