opencv在图像上绘制出矩形并标出起点的坐标_第1页
opencv在图像上绘制出矩形并标出起点的坐标_第2页
opencv在图像上绘制出矩形并标出起点的坐标_第3页
opencv在图像上绘制出矩形并标出起点的坐标_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在图像上绘制出矩形并标出起点的坐标 涉及到两方面的内容:1. 用鼠标画出矩形。2.在图像上绘制出点的坐标 1. 用鼠标绘制矩形,涉及到鼠标的操作,opencv 中有鼠标事件的介绍。需要用到两个函 数: 回调函数 CvMouseCallback 和注册回调函数 cvSetMouseCallback. 当回调函数被调用时,opencv 会传入合适的值,当鼠标有动作时,有所反应,比如画 线,描点。 void CvMouseCallback(int event,int x,int y,int flags,void * param); event 为鼠标事件类型,值为以下一种: CV_EVENT_MOUSEMOVE,CV_EVENT_LBUTTONDOWN,CV_EVENT_RBUTTONDOWN,CV_EVE NT_MBUTTONDOWN,CV_EVENT_RBUTTONUP,CV_EVENT_LBUTTONUP,CV_EVENT_MBUTTO NUP,CV_EVENT_LBUTTONBLCLK,CV_EVENT_RBUTTONBLCLK,CV_EVENT_MBUTTONBLCLK. x,y 表示事件发生时鼠标位置的 x,y 坐标值。 flags 的值表示了别的键如 ctrl,shift 键是否被触发。 Param 可以以任何结构方式传递额外的参数信息。 void cvSetMouseCallback(const char* window_name,CvMouseCallback on_mouse,void* param); 第一个参数指定了回调函数需要注册到的窗口,也就是产生事件的窗口。第二个参数为回 调函数,第三个参数用来传递额外信息给回调函数中的 param 参数。 2. 在图像上绘出点的坐标涉及到 opencv 中的绘图中的字体和文字。主要有函数 cvPutText 和 cvInitFont. void cvPutText(CvArr* img,const char* text,CvPoint origin,const CvFont* font,CvScalar clolor); 这个函数可以在图像上输出一些文本。 text 所指向的文本将打印到图像上。若将点的坐标打印到图像上,就需要把点的坐标 变成字符串,要用到 sprintf 函数。 Origin 为指定文本框的左下角位置。 Void cvInitFont(CvFont* font,int font_face,double hscale,double vscale,double shear=0,int thinckness=1,int line_type=8); hscale 和 vscale 表示字体的高度和宽度。Shear=0.0 字体不倾斜, shear=1.0,字体倾斜。 Opencv 程序和结果如下所示。 #include #include #include #include using namespace std; void my_mouse_callback(int event,int x,int y,int flags,void* param); CvRect box; bool drawing_box=false; void draw_box(IplImage* img,CvRect rect) cvRectangle(img,cvPoint(box.x,box.y),cvPoint(box.x+box.width,box.y+box.height),cvScalar (0x00,0x00,0xff); CvFont font; int main() cvInitFont( box=cvRect(-1,-1,0,0); IplImage* image=cvLoadImage(“1.bmp“); coutwidthheight“*“endl; /cvZero(image); IplImage* temp=cvCloneImage(image); cvNamedWindow(“Box Example“); cvSetMouseCallback(“Box Example“,my_mouse_callback,(void*)image); while(1) cvCopy(image,temp); if(drawing_box) draw_box(temp,box); cvShowImage(“Box Example“,temp); if(cvWaitKey(30)=27) break; cvSaveImage(“temp.jpg“,temp); cvReleaseImage( cvReleaseImage( cvDestroyWindow(“Box Example“); return 0; void my_mouse_callback(int event,int x,int y,int flags,void* param) IplImage* image=(IplImage*)param; switch(event) case CV_EVENT_MOUSEMOVE: if(drawing_box) box.width=x-box.x; box.height=y-box.y; break; case CV_EVENT_LBUTTONDOWN: drawing_box=true; box=cvRect(x,y,0,0); coutbox.x“ “box.yendl; break; case CV_EVENT_LBUTTONUP: drawing_box=false; draw_box(image,box); coutbox.x“ “box.y“ char s13

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论