OpenCV:在图像上绘图。

3
我正在使用OpenCV库编写程序(虽然我对它还是个新手)。其中一件事情是需要在图像上绘制。我看了一下OpenCV的绘图函数,它们都很简单(圆形、线条等),但程序无法编译!确切地说,它显示出以下错误:error C3861: 'Line': identifier not found. 我没有安装某些东西吗?我使用了http://opencv.willowgarage.com/wiki/VisualC%2B%2B_VS2008上的教程,在Visual Studio 2008上安装了OpenCV,到目前为止这是我唯一真正遇到的问题。 请帮助我!我需要尽快让这个程序工作起来!
3个回答

4
在OpenCV C API中绘制线条的函数名为cvLine,而不是Line。请注意使用正确的函数名。

好的...这很容易。网站上什么也没说 -_- http://opencv.willowgarage.com/documentation/python/drawing_functions.html 非常感谢! - Juls
@Juls 你发布的链接是 Python 文档,所以函数名称不同。 - Phil Ross
1
+1 确切无误。Juls,请不要忘记给他的答案点赞或接受它作为官方解决方案。 - karlphillip

1
我认为您已经成为以下常见错误的受害者: 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。)


0
现在您可以轻松地在OpenCV图像上绘制。为此,您需要在OpenCV上调用setMouseCallback('window_name',image_name)函数。之后,您可以轻松处理鼠标回调函数并对图像进行操作。然后,您需要检测cv2.EVENT_LBUTTONDOWN、cv2.EVENT_MOUSEMOVE和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

详情请查看链接:如何在OpenCV图像上绘制并保存图像

输出:

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接