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 #define WINDOW_NAME "鼠标事件窗口" #define EVENT_WINDOW "滚动条窗口" #define PI 3.1415926 u...

Learning OpenCV 鼠标画直线

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

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

在OpenCV中利用鼠标绘制直线

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

opencv 鼠标绘图

程序如下: // 17MouseDraw.cpp : 定义控制台应用程序的入口点。   //鼠标绘图,按下‘r’键可以重新绘图,按下‘s’键则保存图片到磁盘中      #incl...

Opencv鼠标绘图程序

// 鼠标绘图 #include using namespace std; const char *srcWindowsName = "鼠标绘图程序"; const char *saveWindow...

【OpenCV入门指南】第十一篇 鼠标绘图

前面介绍了图像处理中的Canny边缘检测、轮廓检测、直方图以及直方图均衡化。本篇介绍个互动性强一点内容——用鼠标绘图。在OpenCV中进行鼠标绘图也是非常简易的,主要使用到cvSetMouseCall...

Opencv中利用鼠标绘制矩形

转载自   http://blog.csdn.net/quarryman/article/details/6435527 这是两个相关的程序,前者是后者的基础。实际上前一个程序也是在前面博文的...

C# 画(绘制)直线 C#如何画直线 C#绘制直线 WPF 画(绘制)直线

C# 画(绘制)直线 C#如何画直线 C#绘制直线 WPF 画(绘制)直线 有源代码
  • wyx100
  • wyx100
  • 2015-01-03 19:51
  • 3886

python opencv 双击鼠标绘制圆

本节实现的是使用OpenCV里自带的函数,在双击图片时,以其为圆心绘制圆。 - 回调函数 - 捕捉鼠标事件

Opencv用鼠标绘制椭圆

#include #include #define WINDOW_NAME "鼠标事件窗口" #define EVENT_WINDOW "滚动条窗口" #define PI 3.1415926 u...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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