OpenCV:在图像上绘图

Posted

技术标签:

【中文标题】OpenCV:在图像上绘图【英文标题】:OpenCV: Drawing on an image 【发布时间】:2011-04-03 15:56:03 【问题描述】:

我正在开发一个使用 OpenCV 库的程序(尽管我对它很陌生)。我需要做的一件事是在图像上绘图。我查看了 OpenCV 绘图函数,它们看起来都很简单(圆、线等),但是程序无法编译!准确地说是:错误 C3861:“行”:找不到标识符。 有什么我没有安装吗?我使用http://opencv.willowgarage.com/wiki/VisualC%2B%2B_VS2008 上的教程在 Visual Studio 2008 上安装 OpenCV,到目前为止,这是我遇到的唯一真正问题。 请帮我!我需要这个程序尽快运行!

【问题讨论】:

【参考方案1】:

在 OpenCV C API 中画线的函数名为 cvLine,而不是 Line

【讨论】:

好的...这很简单。网站上什么都没说-_- opencv.willowgarage.com/documentation/python/…非常感谢! @Juls 您发布的链接是针对 Python 文档的,这就是函数名称不同的原因。 +1 准确。 Juls,不要忘记对他的答案投票或接受它作为官方解决方案。【参考方案2】:

我认为您已成为以下常见错误的受害者: C 包含在#include <opencv/core.h> 等中,而 C++ 包括:

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <oppencv2/highgui/highgui.hpp>

包括这些用于绘制和显示图像。然后使用using namespace cv; 您不必写cv::line 只需line 一切都会正常工作。 当我开始时,我不得不与同样的问题作斗争。 ;)

(顺便说一句,在 c++ 中使用 cv::Mat。)

【讨论】:

【参考方案3】:

您现在可以轻松地在 OpenCV 图像上绘画。为此,您需要在 opencv 上调用 setMouseCallback(‘window_name’,image_name) 函数。之后,您可以轻松地处理图像上的鼠标回调函数。然后您需要检测cv2.EVENT_LBUTTONDOWN, cv2.EVENT_MOUSEMOVE and cv2.EVENT_LBUTTONUP 事件。通过检查正确的布尔条件,您需要决定您喜欢如何与 OpenCV 图像交互。

def paint_draw(event,former_x,former_y,flags,param):
    global current_former_x,current_former_y,drawing, mode

    if event==cv2.EVENT_LBUTTONDOWN:
        drawing=True
        current_former_x,current_former_y=former_x,former_y

    elif event==cv2.EVENT_MOUSEMOVE:
        if drawing==True:
            if mode==True:
                cv2.line(image,(current_former_x,current_former_y),(former_x,former_y),(0,0,255),5)
                current_former_x = former_x
                current_former_y = former_y
    elif event==cv2.EVENT_LBUTTONUP:
        drawing=False
        if mode==True:
            cv2.line(image,(current_former_x,current_former_y),(former_x,former_y),(0,0,255),5)
            current_former_x = former_x
            current_former_y = former_y
    return former_x,former_y

详情可以看链接:How to Paint on OpenCV Images and Save the Image

输出:

【讨论】:

以上是关于OpenCV:在图像上绘图的主要内容,如果未能解决你的问题,请参考以下文章

如何在opencv中将绘制在图像上的画笔绘图保存为填充和单独的二进制掩码?

OpenCV 例程 300篇254.OpenCV 绘制图像标记

OpenCV 图像处理:常用绘图函数

opencv 绘图及交互(python)

OpenCV 例程200篇212. 绘制倾斜的矩形

OpenCV 例程200篇211. 绘制垂直矩形