📄 8-6.cpp
字号:
// ************************* 程序 8-6 ****************************
/*** 程序功能:
使用鼠标在图像上绘制线段
// ***************************************************************/
//
/*
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <stdlib.h>
IplImage *img0 = 0, *img = 0;
CvPoint prev_pt =
{
-1, -1
};
void on_mouse ( int event, int x, int y, int flags, void * )
{
if ( !img )
{
return;
}
if ( event == CV_EVENT_LBUTTONUP || ( !flags ) )
// LBUTTONUP表示从放开鼠标左键 !flags表示鼠标左键未按下
{
prev_pt = cvPoint ( -1, -1 );
printf ( "%d %d %d\n", flags, prev_pt.x, prev_pt.y );
// 当鼠标没有按下时取消prev_pt
}
else if ( event == CV_EVENT_LBUTTONDOWN )
{
prev_pt = cvPoint ( x, y );
printf ( "%d %d %d\n", flags, prev_pt.x, prev_pt.y );
// 初始化直线起点
}
else if ( event == CV_EVENT_MOUSEMOVE && ( flags & CV_EVENT_FLAG_LBUTTON ) )
// 按下鼠标左键并且移动
{
CvPoint pt = cvPoint ( x, y );
printf ( "%d %d %d\n", flags, pt.x, pt.y );
// 可以清楚看到CV_EVENT_MOUSEMOVE的运作
if ( prev_pt.x < 0 )
{
prev_pt = pt;
}
cvLine ( img, prev_pt, pt, cvScalarAll ( 255 ), 3, 8, 0 );
// 在鼠标经过的上一个坐标点和当前坐标点之间画一条白色线段
prev_pt = pt;
cvShowImage ( "image", img );
}
}
int main ()
{
char *filename = "1.jpg";
if ( ( img0 = cvLoadImage ( filename, -1 ) ) == 0 )
{
return 0;
}
printf ( "Hot keys: \n" "\tESC - quit the program\n" "\tr - restore the original image\n" );
cvNamedWindow ( "image", 1 );
img = cvCloneImage ( img0 );
// 存储原图img图像
cvShowImage ( "image", img );
cvSetMouseCallback ( "image", on_mouse, 0 );
// 调用on_mouse
while ( true )
{
int c = cvWaitKey ( 0 );
if ( ( char ) c == 27 )
{
break;
}
if ( ( char ) c == 'r' )
{
cvCopy ( img0, img );
cvShowImage ( "image", img );
// 恢复原图图像
}
}
return 0;
}
//*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -