python 如何正常地突出显示所有图像上的轮廓?

j8ag8udp  于 2023-04-28  发布在  Python
关注(0)|答案(1)|浏览(144)

我需要突出显示在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)

它应该是这样的

wwtsj6pe

wwtsj6pe1#

问题出在thresh = cv2.threshold(gray, 120, 255, cv2.THRESH_BINARY_INV)[1]行。你的第一个和第三个图像之所以能工作,是因为它们是深棕色的,很可能不满足阈值,并通过cv2反转为白色。THRESH_BINARY_INV,与浅棕色的第二个相比,最有可能满足阈值,因此反转为黑色。我建议您尝试使用阈值参数来实现您想要的结果。您可以 checkout trackbar documentation以方便更改阈值。

相关问题