OpenCV画直线的问题

采石工 2011-05-07 05:53:11
我想利用下面的代码画动态直线。就是说:鼠标左键按下时记录初始点,然后拖动,拖动的过程中不断地修正直线,显示的是初始点和光标所在点之间的直线,鼠标左键松开时显示初始点和松开点之间的直线。我想大家都尝试过用MFC或SDK实现相似功能的程序,可是在OpenCV中用相似的如下的代码怎么就不行了呢?烦请大侠指正指点!


#include "cv.h"
#include "highgui.h"
#include <stdio.h>

#pragma comment( lib, "cv.lib" )
#pragma comment( lib, "cxcore.lib" )
#pragma comment( lib, "highgui.lib" )

IplImage* imgOriginal = 0;
IplImage* img = 0;

void on_mouse( int event, int x, int y, int flags, void* ustc)
{
if( !img )
return;

CvPoint prev_pt;
CvPoint pt;

if( event == CV_EVENT_LBUTTONDOWN )
{
prev_pt = cvPoint(x,y);
pt = cvPoint(x,y);
}
else if( event == CV_EVENT_MOUSEMOVE && (flags & CV_EVENT_FLAG_LBUTTON))
{
cvLine( img, prev_pt, pt, cvScalar(255,0,255,0), 3, CV_AA, 0 );
pt = cvPoint(x,y);

cvLine( img, prev_pt, pt, cvScalar(0,255,0,0), 8, CV_AA, 0 );
cvShowImage( "image", img );
}
}


int main( int argc, char** argv )
{
printf( "Hotkeys: \n"
"ESC - quit the program\n"
"r - restore the original image\n");

imgOriginal=cvCreateImage(cvSize(800,600),IPL_DEPTH_8U,3);
cvSet(imgOriginal,cvScalar(255,255,255,0));
// imgOriginal=cvLoadImage("f:\\lena.jpg",1);

img = cvCloneImage( imgOriginal );
cvNamedWindow( "image", 1 );
cvShowImage( "image", img );

cvSetMouseCallback( "image", on_mouse, 0 );

while(true)
{
int c = cvWaitKey(0);

if( (char)c == 27 )
break;

if( (char)c == 'r' )
{
cvCopy( imgOriginal, img,0 );
cvShowImage( "image", img );
}
}

cvDestroyWindow("image");
cvReleaseImage(&imgOriginal);
cvReleaseImage(&img);

return 0;
}
...全文
352 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
nianhua120 2011-05-07
  • 打赏
  • 举报
回复
看看怎么样?

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧