opencv鼠标绘制直线 C++版

原创 2015年07月16日 15:31:52

因为需要在图片上标记直线,所以从网上找了相应的参考资料。但大多都是c风格的,于是自己就写了一个c++风格的。

opencv2.4.11,win8.1,vs2013

#include <cv.h>  
#include <highgui.h>   
#include <string>

cv::Mat src;
cv::Mat dst;

void on_mouse(int event, int x, int y, int flags, void* ustc)
{
    static CvPoint pre_pt = { -1, -1 };
    static CvPoint cur_pt = { -1, -1 };

    if (event == CV_EVENT_LBUTTONDOWN)
    {
        dst.copyTo(src);
        pre_pt = cvPoint(x, y);
        cv::circle(src, pre_pt, 3, cvScalar(255, 0, 0, 0), CV_FILLED, CV_AA, 0);
        imshow("src", src);
        src.copyTo(dst);
    }
    else if (event == CV_EVENT_MOUSEMOVE && (flags & CV_EVENT_FLAG_LBUTTON))
    {
        dst.copyTo(src);
        cur_pt = cvPoint(x, y);
        cv::line(src, pre_pt, cur_pt, cvScalar(0, 255, 0, 0), 1, CV_AA, 0);
        imshow("src", src);
    }
    else if (event == CV_EVENT_LBUTTONUP)
    {
        dst.copyTo(src);
        cur_pt = cvPoint(x, y);
        cv::circle(src, cur_pt, 3, cvScalar(255, 0, 0, 0), CV_FILLED, CV_AA, 0);
        cv::line(src, pre_pt, cur_pt, cvScalar(0, 255, 0, 0), 1, CV_AA, 0);
        imshow("src", src);
        src.copyTo(dst);
    }
}

int main()
{
    cv::namedWindow("src", CV_WINDOW_AUTOSIZE);
    src = cv::imread("lena.jpg", 1);
    src.copyTo(dst);

    cv::setMouseCallback("src", on_mouse, 0);

    cv::imshow("src", src);
    cv::waitKey(0);

    return 0;
}

效果图

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

在OpenCV中利用鼠标绘制直线

原文 鼠标绘制直线源代码: #include #include #include #pragma comment( lib, "cv.lib" ) #pragma comment( li...

Learning OpenCV 鼠标画直线

仿照Learing OpenCV 例 4.1 win7+VS2013+OpenCV 2.4.9

Opencv鼠标画直线并显示坐标

----------------------------------------------------------------------------------------------------...

【Qt开发】Qt在QLabel(QWidget)鼠标绘制直线和矩形框

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://devbean.blog.51cto.com/448512/243546 说...

鼠标绘制直线源码

  • 2014年03月18日 11:10
  • 1.83MB
  • 下载

Win32鼠标事件绘制直线

  • 2017年04月13日 11:19
  • 11.69MB
  • 下载

利用OpenCV绘制可变直线

转载自:http://blog.csdn.net/quarryman/article/details/6450788       变直线就是绘制后的直线可以修改起始点和终止点(当然包括直线的长度)。...

【OpenCV3】几何图形(直线、矩形、圆、椭圆、多边形等)绘制

在图像处理的过程中,我们有时需要在图像或者视频上画上一些图案或者绘上一些文字。OpenCV中提供了各种功能的绘图函数,使用这些函数,我们可以在图像上绘制直线、矩形、圆、椭圆、多边形、以及文字等等。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:opencv鼠标绘制直线 C++版
举报原因:
原因补充:

(最多只允许输入30个字)