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 }

  • 相关阅读:
    面向对象的继承关系体现在数据结构上时,如何表示
    codeforces 584C Marina and Vasya
    codeforces 602A Two Bases
    LA 4329 PingPong
    codeforces 584B Kolya and Tanya
    codeforces 584A Olesya and Rodion
    codeforces 583B Robot's Task
    codeforces 583A Asphalting Roads
    codeforces 581C Developing Skills
    codeforces 581A Vasya the Hipster
  • 原文地址:https://www.cnblogs.com/ttzm/p/5414932.html
Copyright © 2011-2022 走看看