Nun, hier ist eine Lösung, wenn Sie möchten, dass der Hintergrund anders als eine feste schwarze Farbe ist. Wir müssen nur die Maske invertieren und sie in einem Hintergrundbild der gleichen Größe anwenden und dann beide Hintergrund und Vordergrund kombinieren. Ein Vorteil dieser Lösung ist, dass der Hintergrund alles sein kann (sogar ein anderes Bild).
Dieses Beispiel wurde geändert von Hough Circle Transform. Das erste Bild ist das OpenCV-Logo, das zweite die Originalmaske, das dritte der Hintergrund + Vordergrund kombiniert.

# 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)
Hinweis: Es ist besser, die opencv Methoden zu verwenden, da sie optimiert sind.
was versuchst du zu tun? Da es numpy Unterstützung hat, können Sie numpy Funktionen verwenden. –
Ich mache einige Filterung im HSV-Farbraum zu Originalbild – pzo