2010-08-25 179 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