代码如下:

#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之用鼠标进行交互操作相关推荐

  1. 毛星云Opencv之8.5.2分水岭算法

    #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #i ...

  2. 毛星云opencv之SHi-Tomasi角点检测综合程序

    #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #i ...

  3. 毛星云opencv之10.1.5综合示例--harris角点检测和绘制

    #include <opencv2/opencv.hpp> #include "opencv2/highgui/highgui.hpp" #include " ...

  4. 对于毛星云opencv教程中的方法汇总

    此随笔只为记录,以备后续的回顾 一.图像的载入与显示 C++: Mat imread(const string& filename, intflags=1 ); flags >0返回一个 ...

  5. 毛星云opencv之8.4.4查找和绘制图像轮廓矩

    #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #i ...

  6. 毛星云opencv入门调用摄像头采集图像

    #include<opencv2/opencv.hpp>#include<iostream> using namespace std; using namespace cv; ...

  7. 毛星云opencv之4.3基本图形的绘制(画出原子图和组合图)

    代码如下: #include <opencv2/opencv.hpp> #include<opencv2/core/core.hpp> #include"opencv ...

  8. 毛星云Opencv之9.5模板匹配及其实现代码

    #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" us ...

  9. 毛星云opencv之第10章总结--摘抄

  10. 毛星云opencv之ROI图像叠加混合--5.2.1(定义ROI区域的方法)

    关键代码: bool ROI_AddImage() {     Mat srcImage1 = imread("C:/Users/离子键/source/repos/Project8/1.jp ...

最新文章

  1. U^2-Net跨界肖像画,完美复刻人物细节,GitHub标星2.5K+
  2. http在链接中加入用户名_爬虫基础——HTTP基本原理
  3. PAT甲级1153 Decode Registration Card of PAT :[C++题解]结构体、哈希表、排序、类似数据库查询题、好题
  4. c#写数据到Excel慢
  5. 二进制python_利用Python对二进制数据进行按位处理
  6. python 发送邮件connect none_Python发送邮件功能示例【使用QQ邮箱】
  7. 梯度下降法和随机梯度下降法
  8. C++Builder编程中动态更改自定义打印纸张
  9. 单选 textarea 赋初值
  10. F-Spot 0.3.2
  11. DB2的ErrorCode
  12. JavaScript函数的参数及传参
  13. jupyter notebook 软件安装及使用
  14. Excel文件对比工具
  15. spring 实现小程序抖音去水印后台
  16. esp8266网页控制RGB灯颜色
  17. 笔记本计算机管理没有键盘,如何禁用笔记本键盘输入?怎么关闭笔记本键盘
  18. 机器学习篇-船长总结(hsrjdz01)
  19. M415步进电机驱动器的使用(C51)
  20. 8.16 Redis的新数据结构、配置文件及使用

热门文章

  1. CSS国际化loader - 国际化图片,中东区域适配
  2. hexo 炫酷主题配置
  3. linux编译ko文件
  4. 小米android11账号补丁,小米10 MIUI11 解账户锁 可登小米账号 永不反锁 完美ROOT 解锁包...
  5. 21世纪八大新兴技术领域对美国战略威慑的影响
  6. 汉字常用字unicode码表
  7. Eucalyptus学习汇总
  8. wifi分析仪怎么看哪个信道好_专业的WiFi检测工具有哪些?如何解决wifi信号不好?...
  9. linux 模板 制作工具,OpenTBS 1.8.0 发布,生成 Office 的模板工具
  10. [流媒体服务器搭建] EasyDarwin服务器搭建及客户端推流完整示例