Vâng, đây là giải pháp nếu bạn muốn nền không phải là màu đen. Chúng tôi chỉ cần đảo ngược mặt nạ và áp dụng mặt nạ đó trong hình nền có cùng kích thước và sau đó kết hợp cả nền và nền trước. Một chuyên gia của giải pháp này là nền có thể là bất cứ điều gì (ngay cả hình ảnh khác).
Ví dụ này được sửa đổi từ Hough Circle Transform. Hình ảnh đầu tiên là logo OpenCV, thứ hai là mặt nạ gốc, thứ ba nền + nền trước được kết hợp.
# http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_houghcircles/py_houghcircles.html
import cv2
import numpy as np
# load the image
img = cv2.imread('E:\\FOTOS\\opencv\\opencv_logo.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# detect circles
gray = cv2.medianBlur(cv2.cvtColor(img, cv2.COLOR_RGB2GRAY), 5)
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=50, minRadius=0, maxRadius=0)
circles = np.uint16(np.around(circles))
# draw mask
mask = np.full((img.shape[0], img.shape[1]), 0, dtype=np.uint8) # mask is only
for i in circles[0, :]:
cv2.circle(mask, (i[0], i[1]), i[2], (255, 255, 255), -1)
# get first masked value (foreground)
fg = cv2.bitwise_or(img, img, mask=mask)
# get second masked value (background) mask must be inverted
mask = cv2.bitwise_not(mask)
background = np.full(img.shape, 255, dtype=np.uint8)
bk = cv2.bitwise_or(background, background, mask=mask)
# combine foreground+background
final = cv2.bitwise_or(fg, bk)
Lưu ý: Nó là tốt hơn để sử dụng các phương pháp opencv vì họ được tối ưu hóa.
bạn đang cố gắng làm gì.? vì nó có hỗ trợ gọn gàng, bạn có thể sử dụng các chức năng gọn gàng. –
Tôi đang thực hiện một số chức năng lọc trong không gian màu HSV cho ảnh gốc – pzo