win7+VS2013+OpenCV 2.4.9
//使用鼠标画直线
#include<cv.h>
#include<highgui.h>
void my_callback(int event,int x,int y,int flags,void* param);
CvPoint pt1=cvPoint(0,0);
CvPoint pt2=cvPoint(0,0);
bool drawing_line=false;
void draw_line(IplImage* img,CvPoint p1,CvPoint p2)
{
cvLine(
img,
p1,
p2,
CV_RGB(255,0,0),
3,
8);
}
int main(int argc,char** argv)
{
IplImage* image=cvCreateImage(
cvSize(512,512),
IPL_DEPTH_8U,
3);
cvZero(image);
IplImage* temp=cvCloneImage(image);
cvNamedWindow("Draw Line Example");
cvSetMouseCallback(
"Draw Line Example",
my_callback,
(void*)image);
while(1)
{
cvCopyImage(image,temp);
if(drawing_line) draw_line(temp,pt1,pt2);
cvShowImage("Draw Line Example",temp);
if(cvWaitKey(15)==27)break;
}
cvReleaseImage(&image);
cvReleaseImage(&temp);
cvDestroyAllWindows();
}
void my_callback(int event,int x,int y,int flags,void* param)
{
IplImage* image=(IplImage*) param;
switch (event)
{
case CV_EVENT_MOUSEMOVE:
{
if(drawing_line)
{
pt2=cvPoint(x,y);
}
}
break;
case CV_EVENT_LBUTTONDOWN:
{
pt1=cvPoint(x,y);
drawing_line=true;
}
break;
case CV_EVENT_LBUTTONUP:
{
drawing_line=false;
pt2=cvPoint(x,y);
draw_line(image,pt1,pt2);
}
break;
default:
break;
}
}
运行效果:
但是这种方法有一个问题:
在鼠标左键按下的时候,会出现一条直线,这条直线连接上一条直线的终止点和当前鼠标点。
但是当鼠标拖动时,此直线就消失了。