⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8-6.cpp

📁 基于OpenCV的计算机视觉技术实现.rar
💻 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 + -