欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用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()函数可以获取轮廓的标准外接矩形的四个参数,然后利用这四个参数提取出标准外接矩形中的图像,但是有时其他的物体会混入这个矩形中,以致于影响后续的处理,这时就可以使用这个方法进行抠图。

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

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