毛星云opencv之用鼠标进行交互操作
代码如下:
#include <opencv2/opencv.hpp>
#include"opencv2/highgui/highgui.hpp"
#include<iostream>
using namespace std;
using namespace cv;
#define WINDOW_NAME "【程序窗口】"
void on_MouseHandle(int event, int x, int y, int flags, void* param);
void DrawRectangle(cv::Mat& img,cv::Rect Box);
void ShowHelpText();
Rect g_rectangle;
bool g_bDrawingBox = false;
RNG g_rng(12345);
int main(int argc,char** argv)
{
g_rectangle = Rect(-1, -1, 0, 0);
Mat srcImage(600, 800, CV_8UC3), tempImage;
srcImage.copyTo(tempImage);
g_rectangle = Rect(-1, -1, -0, 0);
srcImage = Scalar::all(0);
namedWindow(WINDOW_NAME);
setMouseCallback(WINDOW_NAME,on_MouseHandle,(void*)&srcImage);
while (1)
{
srcImage.copyTo(tempImage);
if (g_bDrawingBox)DrawRectangle(tempImage, g_rectangle);
imshow(WINDOW_NAME, tempImage);
if (waitKey(10) == 27)
break;
}
return 0;
}
void on_MouseHandle(int event, int x, int y, int flags, void* param)
{
Mat& image = *(cv::Mat*)param;
switch (event)
{
case EVENT_MOUSEMOVE:
{
if (g_bDrawingBox)
{
g_rectangle.width = x - g_rectangle.x;
g_rectangle.height = y - g_rectangle.y;
}
}
break;
case EVENT_LBUTTONDOWN:
{
g_bDrawingBox = true;
g_rectangle = Rect(x,y,0,0);
}
break;
case EVENT_LBUTTONUP:
{
g_bDrawingBox = false;
if (g_rectangle.width < 0)
{
g_rectangle.x += g_rectangle.width;
g_rectangle.width *= -1;
}
if (g_rectangle.height<0)
{
g_rectangle.y += g_rectangle.height;
g_rectangle.height *= -1;
}
DrawRectangle(image, g_rectangle);
}
break;
}
}
void DrawRectangle(cv::Mat& img,cv::Rect box)
{
rectangle(img, box.tl(), box.br(), Scalar(g_rng.uniform(0, 255), g_rng.uniform(0, 255), g_rng.uniform(0, 255)));
}
运行结果如图:
用鼠标左键画就行
毛星云opencv之用鼠标进行交互操作相关推荐
- 毛星云Opencv之8.5.2分水岭算法
#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #i ...
- 毛星云opencv之SHi-Tomasi角点检测综合程序
#include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #i ...
- 毛星云opencv之10.1.5综合示例--harris角点检测和绘制
#include <opencv2/opencv.hpp> #include "opencv2/highgui/highgui.hpp" #include " ...
- 对于毛星云opencv教程中的方法汇总
此随笔只为记录,以备后续的回顾 一.图像的载入与显示 C++: Mat imread(const string& filename, intflags=1 ); flags >0返回一个 ...
- 毛星云opencv之8.4.4查找和绘制图像轮廓矩
#include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #i ...
- 毛星云opencv入门调用摄像头采集图像
#include<opencv2/opencv.hpp>#include<iostream> using namespace std; using namespace cv; ...
- 毛星云opencv之4.3基本图形的绘制(画出原子图和组合图)
代码如下: #include <opencv2/opencv.hpp> #include<opencv2/core/core.hpp> #include"opencv ...
- 毛星云Opencv之9.5模板匹配及其实现代码
#include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" us ...
- 毛星云opencv之第10章总结--摘抄
- 毛星云opencv之ROI图像叠加混合--5.2.1(定义ROI区域的方法)
关键代码: bool ROI_AddImage() { Mat srcImage1 = imread("C:/Users/离子键/source/repos/Project8/1.jp ...
最新文章
- U^2-Net跨界肖像画,完美复刻人物细节,GitHub标星2.5K+
- http在链接中加入用户名_爬虫基础——HTTP基本原理
- PAT甲级1153 Decode Registration Card of PAT :[C++题解]结构体、哈希表、排序、类似数据库查询题、好题
- c#写数据到Excel慢
- 二进制python_利用Python对二进制数据进行按位处理
- python 发送邮件connect none_Python发送邮件功能示例【使用QQ邮箱】
- 梯度下降法和随机梯度下降法
- C++Builder编程中动态更改自定义打印纸张
- 单选 textarea 赋初值
- F-Spot 0.3.2
- DB2的ErrorCode
- JavaScript函数的参数及传参
- jupyter notebook 软件安装及使用
- Excel文件对比工具
- spring 实现小程序抖音去水印后台
- esp8266网页控制RGB灯颜色
- 笔记本计算机管理没有键盘,如何禁用笔记本键盘输入?怎么关闭笔记本键盘
- 机器学习篇-船长总结(hsrjdz01)
- M415步进电机驱动器的使用(C51)
- 8.16 Redis的新数据结构、配置文件及使用
热门文章
- CSS国际化loader - 国际化图片,中东区域适配
- hexo 炫酷主题配置
- linux编译ko文件
- 小米android11账号补丁,小米10 MIUI11 解账户锁 可登小米账号 永不反锁 完美ROOT 解锁包...
- 21世纪八大新兴技术领域对美国战略威慑的影响
- 汉字常用字unicode码表
- Eucalyptus学习汇总
- wifi分析仪怎么看哪个信道好_专业的WiFi检测工具有哪些?如何解决wifi信号不好?...
- linux 模板 制作工具,OpenTBS 1.8.0 发布,生成 Office 的模板工具
- [流媒体服务器搭建] EasyDarwin服务器搭建及客户端推流完整示例