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
您可能感兴趣的文章:
如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!
网友评论