#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
#define WINDOW_NAME "鼠标程序测试"
Mat tempImage;
Mat srcImage(600,800,CV_8UC3);
bool drawRectangleFlag = false;
Rect m_rectangle(-1, -1, 0, 0);
RNG rng(1234);
void DrawRectangle(Mat&image, Rect rect)
{
rectangle(image, rect, Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)));
}
void on_MouseHanle(int event, int x, int y, int flags, void* param)
{
switch(event)
{
case EVENT_MOUSEMOVE:
{
if (drawRectangleFlag)
{
m_rectangle.width = x-m_rectangle.x;
m_rectangle.height = y - m_rectangle.y;
}
}
break;
case EVENT_LBUTTONDOWN:
{
drawRectangleFlag = true;
m_rectangle.x = x;
m_rectangle.y = y;
}
break;
case EVENT_LBUTTONUP:
{
drawRectangleFlag = false;
if (m_rectangle.width < 0)
{
m_rectangle.x = m_rectangle.x + m_rectangle.width;
m_rectangle.width *= -1;
}
if (m_rectangle.height < 0)
{
m_rectangle.y = m_rectangle.y + m_rectangle.height;
m_rectangle.height *= -1;
}
DrawRectangle(srcImage, m_rectangle);
}
}
}
int main(int argc, char **argv)
{
srcImage = Scalar::all(0);
namedWindow(WINDOW_NAME, CV_WINDOW_AUTOSIZE);
setMouseCallback(WINDOW_NAME, on_MouseHanle, (void*)&srcImage);
while (1)
{
srcImage.copyTo(tempImage);
DrawRectangle(tempImage, m_rectangle);
imshow(WINDOW_NAME, tempImage);
if (waitKey(10) == 27)return 0;
}
}
07-30
498
11-13
4055
10-07
2162
05-27