使用py OpenCV抠取物体轮廓中的图像
程序员文章站
2024-01-30 20:05:34
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
上一篇: 怎么消灭桌面上的流氓IE图标