基于opencv用鼠标在窗口中画矩形和线段的程序
2014-09-17 11:01
267 查看
#include "cv.h" #include "highgui.h" #include using namespace std; CvRect box; bool drawing_box = false; void my_mouse_callback(int events, int x, int y, int flags, void *param); void draw_box(IplImage *img, CvRect rect) { cvRectangle(img, cvPoint(box.x, box.y), cvPoint(box.x + box.width, box.y + box.height), cvScalar(0xff, 0xff, 0x00) //color ); } void draw_line(IplImage *img, CvRect rect) { cvLine(img, cvPoint(box.x, box.y), cvPoint(box.x + box.width, box.y + box.height), cvScalar(255, 255, 0)); } int main() { box = cvRect(0, 0, 100, 100); IplImage *image = cvCreateImage(cvSize(1000, 800), IPL_DEPTH_8U, 3); cvZero(image); draw_box(image, box); cvRectangle(image, cvPoint(100, 100), cvPoint(150, 200), cvScalar(255, 255, 255)); cvLine(image, cvPoint(200, 100), cvPoint(150, 200), cvScalar(255, 255, 0)); IplImage * temp = cvCloneImage(image); cvNamedWindow("box example"); cvSetMouseCallback("box example", my_mouse_callback, (void *) image); while (1) { cvCopyImage(image, temp); //将image复制到temp,保证了循环中不停的画矩形而不显示痕迹 if (drawing_box) //,鼠标左键按下时,能实时显示矩形框的形状 { draw_box(temp, box); draw_line(temp, box); } cvShowImage("box example", temp); if (cvWaitKey(15) == 27) break; } cvReleaseImage(&image); cvReleaseImage(&temp); cvDestroyWindow("box example"); return 0; } //鼠标事件回调函数,格式:CvMouseCallback(int event,int x,int y,int flags,void *param) void my_mouse_callback(int events, int x, int y, int flags, void *param) { IplImage *image = (IplImage *) param; if (flags == 16) //CV_EVENT_FLAGS_SHIFTKEY = 16,如果shift键按下,则清屏 cvZero(image); switch (events) { case CV_EVENT_MOUSEMOVE: { if (drawing_box) { box.width = x - box.x; box.height = y - box.y; } } break; case CV_EVENT_LBUTTONUP: { drawing_box = false; cout << "height = " << box.height << endl; cout << "width = " << box.width << endl; /*if (box.width<0){box.x += box.width;box.width *= -1;}if (box.height < 0){box.y += box.height;box.height *= -1;}*/ draw_box(image, box); draw_line(image, box); } break; case CV_EVENT_LBUTTONDOWN: { drawing_box = true; box = cvRect(x, y, 0, 0); } } } }
相关文章推荐
- 用鼠标在窗口中画方形的程序------基于OpenCV+VS
- OPENCV中例4-1用鼠标在窗口中画方形的程序
- OpenCV学习笔记-用鼠标在窗口中画矩形
- opencv用鼠标在窗口中画方形的程序
- Opencv 用鼠标在窗口中画方形的程序实现_第四章书中源码摘写
- opencv用鼠标在窗口中画方形的程序
- opencv用鼠标在窗口中画方形的程序
- opencv-鼠标在窗口中画矩形
- VC基于对话框,文档程序启动时隐藏窗口总结
- opencv 检测直线、线段、圆、矩形
- 基于OpenCV的MFC程序从摄像机输入数据
- OpenCV_用鼠标在窗口画方形
- C++获取程序窗口外的鼠标坐标
- 在OpenCV中利用鼠标绘制矩形和截取图像的矩形区域
- 关于VC6中基于对话框的程序,往Combox 添加一个CComboBox变量,然后程序编译运行,窗口不出现的问题
- 基于OpenCV的程序脱离动态链接库运行方法
- 基于 OpenCV 的程序脱离动态链接库运行方法
- opencv 检测直线、线段、圆、矩形
- 基于OPenCV和MFC的读图程序
- delphi向另一程序窗口某处发送鼠标事件所用的工具