在对象和背景颜色几乎相同的图像中找到轮廓

时间:2019-05-25 19:36:58

标签: python opencv edge-detection opencv-contour

当图像和背景中的对象具有几乎相同的颜色时,如何有效执行边缘检测? 我尝试使用下面的代码,但没有给出我想要的:

import cv2
import matplotlib.pyplot as plt
image = cv2.imread("image1.JPG")

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.bilateralFilter(gray, 11, 17, 17)
edged = cv2.Canny(gray, 10, 150)
edged = cv2.dilate(edged, None, iterations=1)
edged = cv2.erode(edged, None, iterations=1)

plt.imshow(edged)
plt.show()

image1 image1

edges1 edges detected

1 个答案:

答案 0 :(得分:1)

您不应该使用COLOR_BGR2GRAY将图像转换为灰度,这会丢失颜色数据。您要做的就是找到可以为您提供最佳边缘检测结果的色彩空间。您可以尝试3种色彩空间,其中一种可能适合您的应用程序HSV,YCrCb和LAB。

这是在LAB图像的第二个部分检测到canny边缘的结果。

enter image description here enter image description here

lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
a_component = lab[:,:,1]
edged = cv2.Canny(a_component, 10, 50)