РЕДАКТИРОВАТЬ: Хотя мое решение может работать, я настоятельно рекомендую использовать ответ ZdaR , поскольку он дает лучшие результаты с точки зрения правильного смешивания полей с нижележащими подизображениями.
По крайней мере, с моей точки зрения, встроенные функции, такие как cv2.rectangle
, не поддерживают прозрачность даже на изображениях BGRA, см. здесь .Итак, как я описал в связанном ответе, единственная возможность добиться того, чего вы хотите, - это использовать функцию cv2.addWeighted
.
Примером может быть:
import cv2
import numpy as np
# Load image
img = cv2.imread('images/paddington.png')
# Initialize black image of same dimensions for drawing the rectangles
blk = np.zeros(img.shape, np.uint8)
# Draw rectangles
cv2.rectangle(blk, (5, 5), (100, 75), (255, 255, 255), cv2.FILLED)
# Generate result by blending both images (opacity of rectangle image is 0.25 = 25 %)
out = cv2.addWeighted(img, 1.0, blk, 0.25, 1)
cv2.imshow('Image', img)
cv2.imshow('Rects', blk)
cv2.imshow('Output', out)
cv2.waitKey(0)
cv2.destroyAllWindows()
Оригинал Паддингтона img
:
![img](https://i.stack.imgur.com/grS01.png)
Промежуточное изображение для рисования прямоугольников на blk
:
![blk](https://i.stack.imgur.com/5FTdW.png)
И, конечный результат out
:
![out](https://i.stack.imgur.com/fm7P2.png)
После рисования прямоугольникови смешивая изображения, вы можете добавлять свои тексты, как и раньше.
Надеюсь, что поможет!