python - 找到图像中物体和背景颜色几乎相同的轮廓

标签 python opencv contour edge-detection

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

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()

图像1 image1

边缘1 edges detected

最佳答案

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

这是对 LAB 图像的第二个分量进行精明边缘检测的结果。

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)

关于python - 找到图像中物体和背景颜色几乎相同的轮廓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56308105/

相关文章:

java - OpenCV 只找到图像边界作为轮廓

python - 在等高线中绘制 NaNs 区域的边界

python - 使用 drawContours() thickness=-1 填充轮廓将不起作用

javascript - Mapbox gl js等高线+高程

opencv - 为什么 OpenCV 在 2.4.7 中发布 "World.dll"?

python - 合并(追加)来自不同应用程序的 GAE 数据存储

python - 在带有子直方图的 Pandas hist () 图中,如何插入 x 轴和 y 轴的标题以及整体标题?

python - Thread 内调用协程

python ,OpenCV : unable to make custom LBP cascade using opencv_traincascade

Python:将 ctypes_ubyte 数组转换为字符串