简体   繁体   English

如何使矩形透明?

[英]how to do i make the rectangle transparent?

so i'm using opencv and i want to make a sort of selection tool but the problem is can't make the rectangle transparent.所以我正在使用 opencv,我想制作一种选择工具,但问题是无法使矩形透明。 here's the code:这是代码:

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) & 0xFF
    if k == 27:
        break
cv.destroyAllWindows()

The first mistake in the code is:代码中的第一个错误是:

elif event == cv.EVENT_LBUTTONUP:
        drawing = False
        cv.rectangle(img,(ix,iy),(x,y),(0,0,0),-1)

The -1 parameter means to fill the rectangle. -1参数表示填充矩形。 source If we change -1 to 1: 如果我们将 -1 更改为 1:

在此处输入图片说明

From my point of view, the result is not satisfactory.在我看来,结果并不令人满意。 The multiple rectangle display is caused by the mouse_movement .多矩形显示是由mouse_movement引起的。

elif event == cv.EVENT_MOUSEMOVE:
        if drawing == True:
            cv.rectangle(img, (ix, iy), (x, y), (0, 255, 0), 5)

Each time the mouse moves, the rectangle will be drawn.每次鼠标移动时,都会绘制矩形。 I think it is better if we draw when the mouse movement finishes:我认为最好在鼠标移动完成时进行绘制:

在此处输入图片说明

Code:代码:


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) & 0xFF
    if k == 27:
        break
cv.destroyAllWindows()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM