как мне сделать прямоугольник прозрачным?

#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. Рад, если я мог бы помочь :), если вы считаете, что этот ответ решает вашу проблему, вы можете принять его как ответ. В будущем люди, у которых есть такая же проблема, получат выгоду от ответа.