#python #opencv #opencv-python
#python #opencv #opencv-python
Вопрос:
итак, я использую opencv и хочу создать своего рода инструмент выделения, но проблема в том, что прямоугольник не может быть прозрачным. вот код:
import numpy as np
import cv2 as cv
drawing = False
def draw_rec(event,x,y,flags,param):
global ix,iy,drawing
if event == cv.EVENT_LBUTTONDOWN:
drawing = True
ix,iy = x,y
elif event == cv.EVENT_LBUTTONUP:
drawing = False
cv.rectangle(img,(ix,iy),(x,y),(0,0,0),-1)
elif event == cv.EVENT_MOUSEMOVE:
if drawing == True:
cv.rectangle(img, (ix, iy), (x, y), (0, 255, 0), 5)
img = cv.imread('baboon.jpg', -1)
cv.namedWindow('image')
cv.setMouseCallback('image',draw_rec)
while(1):
cv.imshow('image',img)
k = cv.waitKey(1) amp; 0xFF
if k == 27:
break
cv.destroyAllWindows()
Комментарии:
1. Вместо рисования прямоугольника попробуйте нарисовать 4 линии
Ответ №1:
Первая ошибка в коде:
elif event == cv.EVENT_LBUTTONUP:
drawing = False
cv.rectangle(img,(ix,iy),(x,y),(0,0,0),-1)
-1
Параметр означает заполнение прямоугольника. источник, если мы изменим -1 на 1:
С моей точки зрения, результат неудовлетворительный. Отображение нескольких прямоугольников вызвано mouse_movement
.
elif event == cv.EVENT_MOUSEMOVE:
if drawing == True:
cv.rectangle(img, (ix, iy), (x, y), (0, 255, 0), 5)
Каждый раз, когда мышь перемещается, прямоугольник будет нарисован. Я думаю, будет лучше, если мы будем рисовать, когда движение мыши завершится:
Код:
import numpy as np
import cv2 as cv
drawing = False
def draw_rec(event,x,y,flags,param):
global ix,iy,drawing
if event == cv.EVENT_LBUTTONDOWN:
drawing = True
ix,iy = x,y
elif event == cv.EVENT_LBUTTONUP:
drawing = False
cv.rectangle(img,(ix,iy),(x,y),(0,255,0),5)
img = cv.imread('27BR1.jpg', -1)
cv.namedWindow('image')
cv.setMouseCallback('image',draw_rec)
while(1):
cv.imshow('image',img)
k = cv.waitKey(1) amp; 0xFF
if k == 27:
break
cv.destroyAllWindows()
Комментарии:
1. Рад, если я мог бы помочь :), если вы считаете, что этот ответ решает вашу проблему, вы можете принять его как ответ. В будущем люди, у которых есть такая же проблема, получат выгоду от ответа.