2010-08-25 122 views
3

我正在使用OpenCV库的程序工作(尽管我对它很不喜欢)。我需要做的一件事是绘制图像。我查看了OpenCV绘图函数,它们看起来都非常简单(圆形,线形等),但程序不会编译!它说这是确切的:错误C3861:'行':标识符未找到。 有没有我没有安装的东西?我使用http://opencv.willowgarage.com/wiki/VisualC%2B%2B_VS2008上的教程在Visual Studio 2008上安装OpenCV,到目前为止,这是我唯一真正的问题。 请帮帮我!我需要这个程序尽快工作!OpenCV:在图像上绘图

回答

4

在OpenCV C API中绘制一条线的函数名为cvLine,而不是Line

+0

好吧......这是容易的。没有人在网站上说过--_ http://opencv.willowgarage.com/documentation/python/drawing_functions.html 非常感谢! – Juls 2010-08-25 11:46:00

+0

@Juls您发布的链接是用于Python文档的,这就是为什么函数名称不同。 – 2010-08-25 12:12:56

+1

+1准确。 Juls,不要忘了投票答复他的答案或接受它作为官方解决方案。 – karlphillip 2010-08-25 13:27:42

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和一切都会工作正常。
我开始时不得不面对同样的问题。 ;)

(顺便说一句和使用cv::Mat对C++)

0

现在,您可以轻松地在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

输出:

enter image description here