C++通過opencv實現在視窗畫矩形
阿新 • • 發佈:2021-01-16
#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; } }