opencv学习之路(5)、鼠标和滑动条操作
一、鼠标事件

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std; Mat img(,,CV_8UC3,Scalar(,,));//定义成全局变量 void OnMouse(int event,int x,int y,int flags,void* param){
if(event==CV_EVENT_LBUTTONDOWN){//如果鼠标左键按下
cout<<"mouse down"<<endl;//控制台输出
circle(img,Point(x,y),,Scalar(,,),,);//在全局变量img上画圆
}
} void main(){
namedWindow("mouse",CV_WINDOW_AUTOSIZE);
setMouseCallback("mouse",OnMouse,);
while(){
imshow("mouse",img);
if(==waitKey())//每隔10毫秒检测是否按下esc键
break;
}
}

另外一种方法,不必将img图像设置为全局变量,只需传入其地址即可。
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std; Point pt;
void OnMouse(int event,int x,int y,int flags,void* param){
Mat img=*(Mat*)param;//将param强制转换为Mat指针,*(Mat*)=Mat,就如*(int*)=int一样
switch(event){
case CV_EVENT_LBUTTONDOWN://鼠标左键按下时
pt.x=x;
pt.y=y;
break;
case CV_EVENT_LBUTTONUP://鼠标左键抬起时
rectangle(img,pt,Point(x,y),Scalar(,,),,);
break;
default:
break;
}
} void main(){
Mat img(,,CV_8UC3,Scalar(,,));
namedWindow("mouse",CV_WINDOW_AUTOSIZE);
setMouseCallback("mouse",OnMouse,&img);//传入img的地址,这样就不必将img设置成全局变量了 while(){
imshow("mouse",img);
if(==waitKey())//每隔10毫秒检测是否按下esc键
break;
}
}

二、滑动条操作

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std; Mat dst;
int value=; void onChange(int,void* param){
Mat src=*(Mat*)param;
threshold(src,dst,value,,THRESH_BINARY);//二值化
//Canny(src,dst,value,255);//canny边缘检测
imshow("TrackBar",dst);
} void main(){
Mat src=imread("1.jpg",);//读入灰度图
namedWindow("TrackBar",CV_WINDOW_AUTOSIZE);
createTrackbar("Threshold","TrackBar",&value,,onChange,&src); threshold(src,dst,value,,THRESH_BINARY);
//Canny(src,dst,value,255);
imshow("TrackBar",dst);// 21/22/23这三行代码如果去掉的话,在未调整滑动条的情况下,不会有画面显示 waitKey();
}

opencv学习之路(5)、鼠标和滑动条操作的更多相关文章
- 【opencv学习笔记八】创建TrackBar轨迹条
createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...
- opencv学习之路(6)、鼠标截图,滑动条播放视频
一.鼠标截图 #include<opencv2/opencv.hpp> #include<iostream> using namespace cv; using namespa ...
- opencv学习之路(29)、轮廓查找与绘制(八)——轮廓特征属性及应用
一.简介 HSV颜色空间(hue色调,saturation饱和度,value亮度) 二.HSV滑动条 #include "opencv2/opencv.hpp" #include ...
- opencv学习之路(32)、角点检测
一.角点检测的相关概念 二.Harris角点检测——cornerHarris() 参考网址: http://www.cnblogs.com/ronny/p/4009425.html #include ...
- opencv学习之路(12)、图像滤波
一.图像滤波简介 二.方框滤波——boxFilter() #include<opencv2/opencv.hpp> using namespace cv; void main(){ Mat ...
- 利用OpenCV和MFC对话框建设一个有滑动条控制的播放器--转
(一)问题的提出: OpenCV有一个很简单的播放视频文件并加载滑动条的程序,但是如何用MFC对话框来创建一个有滑动条控制的播放器呢,网络上四处搜索都没有代码可以参考,下的都是些骗子链接文件,很过分, ...
- FastAPI 学习之路(五十五)操作Redis
之前我们分享了操作关系型数据库,具体文章, FastAPI 学习之路(三十二)创建数据库 FastAPI 学习之路(三十三)操作数据库 FastAPI 学习之路(三十四)数据库多表操作 这次我们分享的 ...
- Opencv 学习笔记之——鼠标,进度条操作
Opencv中提供一个鼠标调用的函数,SetMouseCallback()函数,它配合一个回调函数来实现鼠标操作的功能. 首先看一下SetMouseCallback的函数原型: c++: void ...
- opencv学习之路(31)、GrabCut & FloodFill图像分割
一.GrabCut 1.利用Rect做分割 #include "opencv2/opencv.hpp" using namespace cv; void main() { Mat ...
随机推荐
- 关于bjam编译自己模块出错的问题
将这个目录下C:\Users\Regubed的user-config.jam改为下面内容 # MSVC configurationusing msvc : 9.0 ; # Python configu ...
- yield和send函数
yield作用类似于return,其本质是一个迭代器. 当程序执行到yield时,会结束本次循环,返回一个值,然后内置含有next()函数, 下次在执行时,会从yield结束的地方继续执行. 带yie ...
- servlet的请求转发与重定向
重定向: Spring的重定向 spring的请求转发:
- Flume:sink.type=hive
Flume以Kafka为Source,以Hive为Sink进行数据转存. 业务背景:公司要求将某四川城市的卡口数据实时接入大数据平台中,历史数据可以通过Hive进行Load,也就是增量数据的对接问题. ...
- 一个获取本机ip地址的正则
ifconfig|grep -oP '(?<=inet addr:)(?=(?!127\.0\.0\.1))\d+(\.\d+){3}'
- smtp常见问题
http://blog.csdn.net/chenfei_5201213/article/details/10138969
- html5-列表
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- Echo团队团队展示
班级:软件工程1916|W 作业:团队作业第一次-团队展示 团队名称:Echo 课程目标:展示团队 成员信息 队员学号 队员姓名 个人博客地址 备注 221600418 黄少勇 http://www. ...
- Chess (SG + 状态压缩预处理)
#include<bits/stdc++.h> #define bit(t) (1 << t) using namespace std; <<; ;//k是集合s的 ...
- golang学习笔记12 beego table name `xxx` repeat register, must be unique 错误问题
golang学习笔记12 beego table name `xxx` repeat register, must be unique 错误问题 今天测试了重新建一个项目生成新的表,然后复制到旧的项目 ...