Python cv2.drawContours innen füllen?
Ich habe ein simples python programm das farben erkennt und diese umrandet(in diesem Fall nur gelb)
Gibt es eine möglichkeit nicht nur die umrandung zu makiren sondern auch das innere mit rot zu füllen?
Kannst du vielleicht den Code zur Verfügung stellen?
import cv2
import numpy as np
img = cv2.imread('image.jpg')
kernel = np.ones((7,7),np.uint8)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_bound = np.array([20, 80, 80])
upper_bound = np.array([30, 255, 255])
mask = cv2.inRange(hsv, lower_bound, upper_bound)
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
segmented_img = cv2.bitwise_and(img, img, mask=mask)
contours, hierarchy = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
output = cv2.drawContours(img, contours, -1, (0, 0, 255), 3)
cv2.imshow("Output", output)
cv2.waitKey(0)
cv2.destroyAllWindows()
1 Antwort
Vom Beitragsersteller als hilfreich ausgezeichnet
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Python
Du Du kannst mit "thickness=cv2.FILLED" alles einfärben.
Also dann an deinem Beispiel:
import numpy as np
import cv2
img = cv2.imread('image.jpg')
kernel = np.ones((7,7),np.uint8)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_bound = np.array([20, 80, 80])
upper_bound = np.array([30, 255, 255])
mask = cv2.inRange(hsv, lower_bound, upper_bound)
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
segmented_img = cv2.bitwise_and(img, img, mask=mask)
contours, hierarchy = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
output = cv2.drawContours(img, contours, -1, color=(0, 0, 255), thickness=cv2.FILLED)
cv2.imshow("Output", output)
cv2.waitKey(0)
cv2.destroyAllWindows()
Ich hoffe ich konnte dir helfen.
LG
Woher ich das weiß:eigene Erfahrung