OpenCV:滑鼠事件 選取矩形ROI區域
阿新 • • 發佈:2018-12-15
目的:
通過點選滑鼠,選擇矩形ROI區域,為後續的ROI區域處理提供方便。
程式碼如下:
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <stdio.h> using namespace cv; Mat org, dst, img, tmp; void on_mouse(int event, int x, int y, int flags, void *ustc) { static Point pre_pt = (-1, -1); static Point cur_pt = (-1, -1); if (event == CV_EVENT_LBUTTONDOWN) { org.copyTo(img); pre_pt = Point(x, y); } else if (event == CV_EVENT_MOUSEMOVE && (flags & CV_EVENT_FLAG_LBUTTON))//摁下左鍵,flags為1 { img.copyTo(tmp); cur_pt = Point(x, y); rectangle(tmp, pre_pt, cur_pt, Scalar(0, 255, 0, 0), 1, 8, 0); imshow("img", tmp); } else if (event == CV_EVENT_LBUTTONUP) { org.copyTo(img); cur_pt = Point(x, y); rectangle(img, pre_pt, cur_pt, Scalar(0, 255, 0, 0), 1, 8, 0); imshow("img", img); img.copyTo(tmp); int width = abs(pre_pt.x - cur_pt.x); int height = abs(pre_pt.y - cur_pt.y); if (width == 0 || height == 0) { return; } dst = org(Rect(min(cur_pt.x, pre_pt.x), min(cur_pt.y, pre_pt.y), width, height)); namedWindow("dst"); imshow("dst", dst); } } void main() { org = imread("desktop.jpg"); org.copyTo(img); namedWindow("img"); setMouseCallback("img", on_mouse, 0); imshow("img", img); waitKey(0); }