?? 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 + -