#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
Mat image;
Rect xx;
bool draw_or_not=0;
RNG g_rng(12345);
//利用鼠标回调函数来在图像上画矩形。
void mouse_on(int event,int x,int y,int ,void*);
void draw_rect(Mat & im,Rect &rec);
int main()
{
//1.创建图像,或者读取一副图像。
image = imread("女神.jpg");
//2.初始化一个矩形。
xx = Rect(-1,-1,0,0);
//3.创建回调函数。
namedWindow("效果窗口");
setMouseCallback("效果窗口",mouse_on);
//4.回调函数调用的画图函数。
while (1)
{
imshow("效果窗口",image);
int c = waitKey(20);
if (c == 27)
break;
}
waitKey(0);
return 1;
}
void mouse_on(int event, int x, int y, int, void*)
{
//1.判断鼠标动作,动作有移动,左键按下,左键松开。在松开时候画矩形。
//1.左键按下,取rect的起始坐标。
if (event == EVENT_LBUTTONDOWN)
{
draw_or_not = 1;
xx.x = x;
xx.y = y;
}
//2.移动的时候,计算rect的长和宽。
if (draw_or_not==1&&event == EVENT_MOUSEMOVE)
{
xx.width = x - xx.x;
xx.height = y - xx.y;
}
//3.左键松开时候,判断长和宽相对于开始点的方向,找出rect的左上点。
if (draw_or_not == 1 && event == CV_EVENT_LBUTTONUP)
{
draw_or_not = 0;
if (xx.width < 0)
{
xx.x = xx.x + xx.width;
xx.width = -xx.width;
}
if (xx.height < 0)
{
xx.y = xx.y + xx.height;
xx.height *= -1;
}
draw_rect(image, xx);
}
}
//4.根据得到的rect参数,来在image上画矩形。
void draw_rect(Mat& im, Rect& rec)
{
rectangle(im,rec,Scalar(g_rng.uniform(0,255), g_rng.uniform(0, 255), g_rng.uniform(0, 255)));
}
利用鼠标回调函数来在图像上画矩形
最新推荐文章于 2020-12-22 18:21:23 发布