2010-08-25 2 views
3

Я работаю над программой, использующей библиотеку OpenCV (хотя я на ней совершенно нуб). Одна из вещей, которые мне нужно сделать, - это нарисовать изображение. Я посмотрел на функции рисования OpenCV, и все они выглядят довольно просто (Circle, Line и т. Д.), Однако программа не будет компилироваться! В нем сказано, что это точно: ошибка C3861: «Линия»: идентификатор не найден. Есть ли что-то, что я не установил? Я использовал учебник по http://opencv.willowgarage.com/wiki/VisualC%2B%2B_VS2008 для установки OpenCV на Visual Studio 2008, и до сих пор это единственная реальная проблема, которая у меня есть. Пожалуйста, помогите мне! Мне нужно, чтобы эта программа работала как можно скорее!OpenCV: Рисование на изображении

ответ

4

Функция рисования линии в API OpenCV C называется cvLine, а не Line.

+0

Хорошо ... Это было легко. Ничего не было сказано на сайте -_- http://opencv.willowgarage.com/documentation/python/drawing_functions.html Большое спасибо! – Juls

+0

@Juls Ссылка, которую вы отправили, предназначена для документации Python, поэтому имена функций различны. –

+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, и все будет хорошо работать.
Мне пришлось сражаться с той же проблемой, когда я начал. ;)

(И кстати использовать cv::Mat для C++)

0

Теперь вы можете легко рисовать на OpenCV изображений.. Для этого вам нужно вызвать функцию setMouseCallback(‘window_name’,image_name) на opencv. После этого вы можете легко обрабатывать функцию обратного вызова мыши на своих изображениях. Затем вам нужно определить события 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