OpenCV: рисование на изображении - PullRequest
3 голосов
/ 25 августа 2010

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

Ответы [ 3 ]

4 голосов
/ 25 августа 2010

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

1 голос
/ 02 ноября 2012

Я думаю, что вы стали жертвой следующей распространенной ошибки: включения 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 голосов
/ 15 января 2018

Теперь вы можете легко рисовать на изображениях 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

Подробнее см. Ссылку: Как рисовать на изображениях OpenCV и сохранять изображение

Выход:

enter image description here

...