OpenCV中没有实现按钮的功能,我们可以利用滑动条来实现按钮功能。

int createTrackerbar(const string& trackerbarname, const string winame, int* value, int count, 
TrackbarCallback onChange=, void* userdata=);

trackbarname

轨迹条的名字。

winname

窗口的名字,轨迹条会依附在这个窗口上。

value

一个指向整型的指针,表示滑块的位置,在创建时,滑块的初始位置就是该变量当前的值。

count

滑块可以达到的最大位置的值。滑块最小位置的值始终为0。

onchange

指向回调函数的指针,每次滑块位置改变时,这个函数都会进行回调。并且这个函数的原型必须为void XXXX(int,void*);其中第一个参数是轨迹条的位置,第二个参数是用户数据(本函数中参数userdata)。如果回调函数是NULL指针,则表示没有回调函数的调用,仅参数value有变化。

userdata

用户传给回调函数的数据,用来处理轨迹条事件。如果使用的value实参是全局变量,可以不去管userdata参数。

int getTrackbarPos(const string& trackbarname, const string& winname );

trackbarname

轨迹条的名字

winname

轨迹条的父窗口的名称

实例

下面的代码将wuli男神和wuli女神的图片混合在一起,输入图片如下:

wuliEddie1.jpg

wuliShishi.jpg

MixAlphaImages.cxx

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp> #define WINDOW_NAME "Mixed Images" // global variables
const int g_nMaxAlphaValue = ; // maximun alpha value
int g_nAlphaValueSlider; // value from trackbar
double g_dAlphaValue;
double g_dBetaValue; // Mat objects for images
cv::Mat g_srcImage1;
cv::Mat g_srcImage2;
cv::Mat g_dstImage; // on trackbar
void on_Trackbar( int, void* )
{
g_dAlphaValue = (double) g_nAlphaValueSlider/g_nMaxAlphaValue;
g_dBetaValue = (1.0-g_dAlphaValue); addWeighted(g_srcImage1, g_dAlphaValue, g_srcImage2, g_dBetaValue, 0.0, g_dstImage); cv::imshow(WINDOW_NAME, g_dstImage);
} // main
int main( int argc, char** argv )
{
// load image and show
g_srcImage1 = cv::imread("wuliEddie1.jpg");
g_srcImage2 = cv::imread("wuliShishi1.jpg");
// NOTE: two image should be the same size
if(!g_srcImage1.data)
{
printf("Error getting the first images. Put the image wuliEddie1.jpeg to Debug folder. \n");
return -;
}
if(!g_srcImage1.data)
{
printf("Error getting the second images. Put the image wuliShishi1.jpeg to Debug folder. \n");
return -;
} // initialize trackbar value
g_nAlphaValueSlider = ; // create window
cv::namedWindow(WINDOW_NAME, ); // create trackbar
char TrackbarName[];
sprintf( TrackbarName, "Alpha Value %d", g_nMaxAlphaValue ); cv::createTrackbar( TrackbarName, WINDOW_NAME, &g_nAlphaValueSlider, g_nMaxAlphaValue, on_Trackbar ); // to show the initial image
on_Trackbar(g_nAlphaValueSlider, ); cv::waitKey();
return ;
}

结果图

滑动条 Trackbar[OpenCV 笔记9]的更多相关文章

  1. 图像显示 imshow()[OpenCV 笔记5]

    void imshow(const string& winname InputArray mat); winname 窗口表识名称 mat 需要显示的图像.InputArray类型,声明如下 ...

  2. OpenCV基本架构[OpenCV 笔记0]

    最近正在系统学习OpenCV,将不定期发布笔记,主要按照毛星云的<OpenCV3编程入门>的顺序学习,会参考官方教程和文档.学习工具是Xcode+CMake,会对书中一部分内容更正,并加入 ...

  3. 查找并绘制轮廓[OpenCV 笔记XX]

    好久没有更新了,原谅自己放了个假最近又在赶进度,所以...更新的内容是很靠后的第八章,因为最近工作要用就先跳了,后面会更新笔记编号...加油加油! 在二值图像中寻找轮廓 void cv::findCo ...

  4. 访问图像中的像素[OpenCV 笔记16]

    再更一发好久没更过的OpenCV,不过其实写到这个部分对计算机视觉算法有所了解的应该可以做到用什么查什么了,所以后面可能会更的慢一点吧,既然开了新坑,还是机器学习更有研究价值吧... 图像在内存中的存 ...

  5. 实例:图形绘制[OpenCV 笔记15]

    DrawShapes.cxx # include "DrawShapes_utils.h" #define WINDOW_NAME1 "Painting 1" ...

  6. Core模块其他常用知识点[OpenCV 笔记14]

    Matx 轻量级的Mat,必须在使用前规定好大小,比如一个2x3的float型的Matx,可以声明为Matx23f Vec Vec是Matx的一个派生类,是一个一维的Matx,跟vector很相似.在 ...

  7. 颜色空间转换 cvtColor()[OpenCV 笔记13]

    void cvtColor(InputArray src, OutputArray dst, ) src: 输入图像 dst: 输出图像 code: 颜色空间转换标识符 OpenCV2的CV_前缀宏命 ...

  8. 图像储存容器Mat[OpenCV 笔记11]

    IplImage 与 Mat IplImage是OpenCV1中的图像存储结构体,基于C接口创建.在退出之前必须release,否则就会造成内存泄露.在一些只能使用C语言的嵌入式系统中,不得不使用. ...

  9. 鼠标操作[OpenCV 笔记10]

    ) winname 窗口名字 onMouse 指定窗口每次鼠标事件发生的时候,被调用的函数指针.函数的原型应为void Foo(int event, int x, int y, int flags, ...

随机推荐

  1. 微软云平台windows azure入门系列八课程

    微软云平台windows azure入门系列八课程: Windows Azure入门教学系列 (一): 创建第一个WebRole程序与部署 Windows Azure入门教学系列 (二): 创建第一个 ...

  2. [MySQL]快速解决"is marked as crashed and should be repaired"故障

    具体报错如下: Table '.\Tablename\posts' is marked as crashed and should be repaired 提示说论坛的帖子表posts被标记有问题,需 ...

  3. 跟我一起写Makefile:MakeFile介绍

    makefile 介绍 make命令执行时,需要一个 makefile 文件,以告诉make命令如何去编译和链接程序. 首先,我们用一个示例来说明makefile的书写规则.以便给大家一个感性认识.这 ...

  4. 如何将可执行文件打包至APK并运行(转)

    原文链接:http://www.lupaworld.com/home.php?mod=space&uid=345712&do=blog&id=248921 好久没有写bolg了 ...

  5. 教程-MessageBox 使用方法

    对应对象:TApplication 声明:function MessageBox(Text,Caption:PChar;Flags:Word):Integer; 功能:MessageBox方法可以显示 ...

  6. 仿写thinkphp的I方法

    自己定义一个方法仿写thinkphp的I 方法 <?php function I($key="",$default='',$function="") { ...

  7. DevExpress MessageBox 弹出框 底层类

    效果图: 前台调用: //图一的前台调用 MessageBox.Show("测试", "标题", MessageBoxButtons.OK); //图二的前台调 ...

  8. javabean以及内省技术详解(转)

    一.关于javabean javabean是固定写法的java类 书写格式为: 1)必须有无参构造函数 2)属性必须私有, 我们称为字段 3)提供标准的getter和setter 例: name 字段 ...

  9. iOS 基础知识

    1获取系统语言设置 NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults]; NSArray *languages = ...

  10. 【16】成对使用new和delete时要采取相同形式

    简而言之,new时不带[],delete时也不带[]:new时带[],delete时也要带[].如果不匹配,要么造成多销毁对象,导致未定义行为:要么导致少销毁对象,导致内存泄漏.