我有一个图像中的对象集合。 检查示例输入图像here。在
我想找出每个物体的轮廓。 我按照下面的方法使用OpenCV2来识别轮廓
gray = cv2.cvtColor(input_image, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (7, 7), 0)
edged = cv2.Canny(gray, 50, 100)
dilate= cv2.dilate(edged, None, iterations=1)
erode= cv2.erode(dilate, None, iterations=1)
cnts = cv2.findContours(erode, cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
这是上面代码的轮廓输出:see output image
有没有更好的方法来识别图像中的物体?在
您错过了代码片段中的一个简单步骤,
cv2.findContours()
对二进制图像效果最好,但您只是将灰度图像传递给cv2.findContours
。我按照以下步骤从背景中分割出苹果:第一步:分割出主要包含灰度像素的背景
您可以在这里使用HSV color domain,其中饱和度较低的背景将被分割为:
第2步:对于深黑像素,饱和度值是突然的,所以我们分割了极端的黑白像素:
^{pr2}$步骤3:合并这些掩码以获得
cv2.findContours
的最终掩码:第四步:现在要填补这些漏洞,我们要腐蚀和放大图像:
第5步:使用
cv2.findContours()
获得轮廓,并对区域进行过滤以删除较小的轮廓:第6步:显示最终轮廓
以下是完整的代码片段:
相关问题 更多 >
编程相关推荐