Я работаю над программой, использующей библиотеку OpenCV (хотя я на ней совершенно нуб). Одна из вещей, которые мне нужно сделать, - это нарисовать изображение. Я посмотрел на функции рисования OpenCV, и все они выглядят довольно просто (Circle, Line и т. Д.), Однако программа не будет компилироваться! В нем сказано, что это точно: ошибка C3861: «Линия»: идентификатор не найден. Есть ли что-то, что я не установил? Я использовал учебник по http://opencv.willowgarage.com/wiki/VisualC%2B%2B_VS2008 для установки OpenCV на Visual Studio 2008, и до сих пор это единственная реальная проблема, которая у меня есть. Пожалуйста, помогите мне! Мне нужно, чтобы эта программа работала как можно скорее!OpenCV: Рисование на изображении
ответ
Функция рисования линии в API OpenCV C называется cvLine
, а не Line
.
Я думаю, что вы пали жертвой следующей общей ошибкой: 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++)
Теперь вы можете легко рисовать на 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
Выход:
Хорошо ... Это было легко. Ничего не было сказано на сайте -_- http://opencv.willowgarage.com/documentation/python/drawing_functions.html Большое спасибо! – Juls
@Juls Ссылка, которую вы отправили, предназначена для документации Python, поэтому имена функций различны. –
+1 Точная. Juls, не забудьте проголосовать за его ответ или принять его как официальное решение. – karlphillip