当前位置: 移动技术网 > IT编程>脚本编程>Python > 使用py OpenCV抠取物体轮廓中的图像

使用py OpenCV抠取物体轮廓中的图像

2020年07月16日  | 移动技术网IT编程  | 我要评论
import cv2import numpy as npepsilon = 0.001#轮廓近似多边形#cnt:物体的轮廓#epsilon:精度#true:闭合曲线box= cv2.approxPolyDP(cnt, epsilon, True)box= box.reshape(-1, 1, 2)# 画多边形#image: 待处理的图像Polygon = np.zeros(image.shape, np.uint8)Polygon = cv2.polylines(Polygon
import cv2
import numpy as np

epsilon = 0.001

#轮廓近似多边形
#cnt:物体的轮廓
#epsilon:精度
#true:闭合曲线
box= cv2.approxPolyDP(cnt, epsilon, True)
box= box.reshape(-1, 1, 2)

# 画多边形
#image: 待处理的图像
Polygon = np.zeros(image.shape, np.uint8)
Polygon = cv2.polylines(Polygon, [box], True, (0, 0, 0))

# 填充多边形
Polygon2 = cv2.fillPoly(Polygon, [box], (255, 0, 0))

result_img = cv2.bitwise_and(Polygon2, image)

使用这种方法可以实现一些特殊的需求,比如使用boundingRect()函数可以获取轮廓的标准外接矩形的四个参数,然后利用这四个参数提取出标准外接矩形中的图像,但是有时其他的物体会混入这个矩形中,以致于影响后续的处理,这时就可以使用这个方法进行抠图。

举个例子:
在这里插入图片描述
如果要提取lazy的字母y的轮廓,使用标准外接矩形,会得到以下结果:
在这里插入图片描述
如果是进行神经网络的字母识别,那就会影响识别的结果,因此要将y的轮廓单独抠出来。
在这里插入图片描述
由于是轮廓近似得到的多边形,因此图像会比原本的轮廓稍微有些变化,可以将得到的多边形稍微膨胀一点,即可得到更完整的图像

本文地址:https://blog.csdn.net/RegenWind/article/details/107367647

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网