本篇文章小编给大家分享一下Python图像处理之目标物体轮廓提取代码实现方法,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
1 引言
目标物体的边缘对图像识别和计算机分析十分有用。边缘可以勾画出目标物体,使观察者一目了然;边缘蕴含了丰富的内在信息(如方向、形状等),是图像识别中抽取图像特征的重要属性。轮廓提取是边界分割中非常重要的一种处理,同时也是图像处理的经典难题,轮廓提取和轮廓跟踪的目的都是获得图像的外部轮廓特征。
2 原理
二值图像的轮廓提取的原理非常简单,就是掏空内部点:如果原图中有一点为黑,且它的8个相邻点皆为黑色,则将该点删除。对于非二值图像,需要先进行二值化处理。轮廓提取的方法有很多,在这里我们介绍一种最基本、最简单容易实现的算法。算法原理如下:
在进行轮廓提取时,使用一个一维数组,用来记录处理的像素点的周围8邻域的信息
若8个邻域的像素点的灰度值和中心点的灰度值相同,则认为该点在物体的内部,可以删除;
否则,认为该点在图像的边缘,需要保留。
依次处理图像中每一个像素,则最后留下来的就是图像的轮廓。
3 Python实现
1)读入彩色图像
img_name = "./20210808/sample3.png" img = cv2.imread(img_name)
结果如下:
2) 彩色图像灰度化
gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
结果如下:
3)二值化
def get_binary_img(img): # gray img to bin image bin_img = np.zeros(shape=(img.shape), dtype=np.uint8) h = img.shape[0] w = img.shape[1] for i in range(h): for j in range(w): bin_img[i][j] = 255 if img[i][j] > 127 else 0 return bin_img # 调用 bin_img = get_binary_img(gray_img)
结果如下:
4)提取轮廓
参考上述原理,进行实现,代码如下:
def get_contour(bin_img): # get contour contour_img = np.zeros(shape=(bin_img.shape),dtype=np.uint8) contour_img += 255 h = bin_img.shape[0] w = bin_img.shape[1] for i in range(1,h-1): for j in range(1,w-1): if(bin_img[i][j]==0): contour_img[i][j] = 0 sum = 0 sum += bin_img[i - 1][j + 1] sum += bin_img[i][j + 1] sum += bin_img[i + 1][j + 1] sum += bin_img[i - 1][j] sum += bin_img[i + 1][j] sum += bin_img[i - 1][j - 1] sum += bin_img[i][j - 1] sum += bin_img[i + 1][j - 1] if sum == 0: contour_img[i][j] = 255 return contour_img # 调用 contour_img = get_contour(bin_img)
结果如下:
4 总结
通过上述简单步骤,我们实现了物体轮廓提取,相应的处理效果如下:
上图中 左侧为原图,右侧为我们提取的物体轮廓图。
太极熊猫2百度版 安卓版v1.7.1
下载黎明觉醒应用宝版 安卓版v1.111.1
下载暗影格斗3国际版 (Shadow Fight 3)最新版v1.40.3
下载王者战魂华为版 安卓版v3.6.1
下载放置魔法学院免广告版 v2.9.5
放置魔法学院内置Mod菜单是游戏的破解版本,在该版本中为玩家
万乘之国qq版本 安卓版v1.0.5
万乘之国qq版本是一款极具魅力的策略游戏,玩家们可以通过不同
动物餐厅国际服无限内购版 v12.9
动物餐厅国际服免广告版是游戏的破解版本,在该版本中为玩家去除
欧洲卡车司机 安卓版v3.2
欧洲卡车司机是款模拟经营游戏,这款游戏的画面还是蛮逼真的,给
疯狂大酒店 (Grand Hotel Mania)最新中文版v4.10.0.20
疯狂大酒店(Grand Hotel Mania)是一款好玩的