我需要突出显示在Python上使用OpenCV呈现的所有图像的轮廓
我尝试了代码,但它在第二个图像上无法正常工作
import cv2
import numpy as np
# Input image and make it gray
image = cv2.imread("img2.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Blur
gray = cv2.GaussianBlur(gray, (5, 5), 0)
thresh = cv2.threshold(gray, 120, 255, cv2.THRESH_BINARY_INV)[1]
# Find contours
cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
c = max(cnts, key=cv2.contourArea)
# Draw dots onto image
cv2.drawContours(image, [c], -1, (0, 255, 0), 1)
cv2.imshow('Image', image)
cv2.WaitKey(0)
它应该是这样的
1条答案
按热度按时间wwtsj6pe1#
问题出在
thresh = cv2.threshold(gray, 120, 255, cv2.THRESH_BINARY_INV)[1]
行。你的第一个和第三个图像之所以能工作,是因为它们是深棕色的,很可能不满足阈值,并通过cv2反转为白色。THRESH_BINARY_INV,与浅棕色的第二个相比,最有可能满足阈值,因此反转为黑色。我建议您尝试使用阈值参数来实现您想要的结果。您可以 checkout trackbar documentation以方便更改阈值。