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. HW5.12

    public class Solution { public static void main(String[] args) { printChars('1', 'Z', 10); } public ...

  2. linux定时器HZ和Jiffies

    1.linux HZ Linux核心几个重要跟时间有关的名词或变数,以下将介绍HZ.tick与jiffies. HZ Linux核心每隔固定周期会发出timer interrupt (IRQ 0),H ...

  3. python seq

    missing parentheses in call to print  ==> python高版本 print("") name 'raw_input' is not d ...

  4. A Tour of Go Forever

    If you omit the loop condition it loops forever, so an infinite loop is compactly(简洁地:紧密地:细密地) expre ...

  5. light oj 1297 Largest Box

    1297 - Largest Box   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB In t ...

  6. PAT 1089. Insert or Merge (25)

    According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...

  7. [USACO08JAN]电话线Telephone Lines

    多年以后,笨笨长大了,成为了电话线布置师.由于地震使得某市的电话线全部损坏,笨笨是负责接到震中市的负责人.该市周围分布着N(1<=N<=1000)根据1……n顺序编号的废弃的电话线杆,任意 ...

  8. 在JSP页面中输出JSON格式数据

    JSON-taglib是一套使在JSP页面中输出JSON格式数据的标签库. JSON-taglib主页: http://json-taglib.sourceforge.net/index.html J ...

  9. Visual C++ 2012/2013的内存溢出检測工具

    在过去,每次编写C/C++程序的时候,VLD差点儿是我的标配.有了它,就能够放心地敲代码,随时发现内存溢出. VLD最高可支持到Visual Studio 2012.不知道以后会不会支持Visual ...

  10. DelphiTXT文档编辑器

    EXE:http://files.cnblogs.com/xe2011/Text_EditorRelease2013-12-20-185320.rar Delphi XE5 PAS:http://fi ...