在图像上绘制出矩形并标出起点的坐标
涉及到两方面的内容:
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_EVEN
T_MBUTTONDOWN,CV_EVENT_RBUTTONUP
,CV_EVENT_LBUTTONUP
,CV_EVENT_MBUTTONU
P
,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));
}