Python cv2.drawContours innen füllen?

Hanibal545  21.09.2022, 17:48

Kannst du vielleicht den Code zur Verfügung stellen?

KatzenPhantom 
Fragesteller
 21.09.2022, 17:52
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 Fragesteller als hilfreich ausgezeichnet

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
KatzenPhantom 
Fragesteller
 22.09.2022, 14:42

Vielen Dank ist sehr hilfreich

1