zoukankan      html  css  js  c++  java
  • 鼠标(画矩形事件)—不怎么样

     1 #include<iostream>
     2 #include<opencv2/opencv.hpp>
     3 
     4 #define WINDOW_NAME "鼠标事件窗口"
     5 
     6 using namespace std;
     7 using namespace cv;
     8 
     9 Rect g_rectangle;
    10 bool g_bDrawingBox = false;
    11 RNG g_rng(12345);
    12 
    13 void DrawRectangle(Mat &img, Rect box)
    14 {
    15     rectangle(img, box.tl(), box.br(), Scalar(g_rng.uniform(0, 255), g_rng.uniform(0, 255), g_rng.uniform(0, 255)));
    16 }
    17 
    18 /*注意:不能在毁掉函数中写入未初始化的矩阵类,所以需要用时,需要写一个标志位,然后再在while(1)循环内使用*/
    19 void onMouse(int event, int x, int y, int flag, void *param)
    20 {
    21     Mat &img = *(cv::Mat*)param;
    22 
    23     switch (event)
    24     { 
    25         //移动鼠标的时候
    26     case CV_EVENT_MOUSEMOVE:
    27     {
    28                                if (g_bDrawingBox)
    29                                {
    30                                    g_rectangle.width = x - g_rectangle.x;
    31                                    g_rectangle.height = y - g_rectangle.y;
    32                                }
    33     }
    34         break;
    35         //点击鼠标左键时
    36     case CV_EVENT_LBUTTONDOWN:
    37     {
    38                                  g_bDrawingBox = true;
    39                                  g_rectangle = Rect(x, y, 0, 0);
    40     }
    41         break;
    42         //松开鼠标左键时
    43     case CV_EVENT_LBUTTONUP:
    44     {
    45                                g_bDrawingBox = false;
    46 
    47                                DrawRectangle(img, g_rectangle);
    48     }
    49         break;
    50     }
    51 }
    52 
    53 int main()
    54 {
    55     Mat srcImage(600, 800, CV_8UC3);
    56     Mat tempImage;
    57 
    58     srcImage.copyTo(tempImage);
    59 
    60     srcImage = Scalar::all(0);
    61 
    62     namedWindow(WINDOW_NAME);
    63     setMouseCallback(WINDOW_NAME, onMouse, (void *)&srcImage);
    64 
    65     while (1)
    66     {
    67         srcImage.copyTo(tempImage);
    68 
    69         if (g_bDrawingBox)
    70             DrawRectangle(tempImage, g_rectangle);
    71 
    72         imshow(WINDOW_NAME, tempImage);
    73 
    74         if(waitKey(10) == 27)
    75             break;
    76 
    77         /*DrawRectangle(srcImage, g_rectangle);
    78         imshow(WINDOW_NAME, srcImage);
    79         if (waitKey(10) == 27)
    80             break;*/
    81     }
    82 
    83     return 0;
    84 }

  • 相关阅读:
    Java IO: 读取classpath资源
    Java IO: Reader和Writer
    Java IO: 读写zip文件
    OpenFlow运行机制总结
    OpenFlow流表概述
    Java日志系统(学习总结)
    卷积神经网络重要回顾
    Java Servlet学习笔记
    fragment实例
    Fragment应用
  • 原文地址:https://www.cnblogs.com/ttzm/p/5414932.html
Copyright © 2011-2022 走看看