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鼠标画直线并显示坐标

----------------------------------------------------------------------------------------------------...
  • mars_xiaolei
  • mars_xiaolei
  • 2017年03月15日 17:11
  • 1456

opencv3 鼠标响应函数画矩形

注代码来自毛大神: //---------------------------------【头文件、命名空间包含部分】----------------------------- // 描述:包含...
  • yang332233
  • yang332233
  • 2016年04月25日 16:01
  • 924

Opencv鼠标画直线并显示坐标

----------------------------------------------------------------------------------------------------...
  • mars_xiaolei
  • mars_xiaolei
  • 2017年03月15日 17:11
  • 1456

opencv各种画图 直线 矩形 圆 椭圆

绘图函数 (1)直线cvLine函数 其结构 void cvLine(//画直线 CvArr* array,//画布图像 CvPoint pt1,//起始点 CvPoint pt2,/...
  • u012590688
  • u012590688
  • 2015年07月02日 11:38
  • 7092

opencv3 鼠标响应函数画矩形

注代码来自毛大神: //---------------------------------【头文件、命名空间包含部分】----------------------------- // 描述:包含...
  • yang332233
  • yang332233
  • 2016年04月25日 16:01
  • 924

canvas画图:用鼠标---画曲线,直线,矩形,圆

var canvas = document.getElementById('canvas'); // 得到画布 var ctx = canvas.getContext('2d'); // 得到画布的...
  • qq_31164127
  • qq_31164127
  • 2017年06月08日 17:28
  • 1695

opencv学习笔记(十一)利用鼠标画出一个矩形

利用鼠标画出一个矩形。
  • u014751607
  • u014751607
  • 2016年12月29日 17:09
  • 711

Opencv画延长线

转自   http://blog.csdn.net/abcjennifer/article/details/7440887 hough变换可以让我们检测到直线,这在前面已有详解,对于车道检测...
  • tianzhu1026
  • tianzhu1026
  • 2017年04月01日 09:54
  • 432

OPENCV图像处理基础(五)鼠标事件画个框

在GUI编程中会涉及到鼠标事件,通过鼠标事件可以使得人和机器的交互更为便捷。opencv中提供了一种以回调函数实现的鼠标事件机制。 下面是一个例子,通过鼠标在一张图片上画出任意大小的矩形框。 效果...
  • chenpidaxia
  • chenpidaxia
  • 2016年03月24日 22:44
  • 1546

Opencv用鼠标画圆

#include #include #define WINDOW_NAME "鼠标事件窗口" #define EVENT_WINDOW "滚动条窗口" #define PI 3.1415926 u...
  • qq_23880193
  • qq_23880193
  • 2015年08月25日 15:28
  • 847
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:opencv鼠标绘制直线 C++版
举报原因:
原因补充:

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