删除具有特定颜色的图像的边框-NumPy / Python

问题描述 投票:1回答:1

我提取了以下图像。背景值为170,我需要提取至少包含170个值的多边形。因为图片如下enter image description here

我希望具有如下处理的图像

enter image description here

我可以实现一个嵌套的for循环,并进行迭代,直到找到该列的最小索引并为每一行找到该列号的最大索引,然后提取区域。。但是我对numpy查询更有效的解决方案感兴趣

python numpy image-processing numpy-slicing
1个回答
1
投票

方法#1

一种策略是标记图像,获得一个角的标签,作为背景颜色的一个样本,并创建该颜色的蒙版。因此,倒置遮罩区域是我们要裁剪的区域。对于裁剪,我们将从Crop black border of image using NumPy : Answer post中获得启发。

这里是实现-

Crop black border of image using NumPy : Answer post

输入-

import cv2 from scipy.ndimage import label im = cv2.imread('xYTKn.png') # read in input image L,_ = label(im) mask = (L!=L[0,0]).any(-1) out = im[np.ix_(mask.any(1), mask.any(0))] cv2.imwrite('output.png',out)

输出-

enter image description here


方法#2

另一种类似的策略是先转换为灰度,然后标记并获得所需的蒙版,像这样-

enter image description here

基准测试

我们将在给定的样本图像上计时建议的解决方案。两种方法之间的蒙版创建不同。因此,我们将仅对这些部分进行计时-

gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
L,_ = label(gray)
mask = (L!=L[0,0])
out = im[np.ix_(mask.any(1), mask.any(0))]
© www.soinside.com 2019 - 2024. All rights reserved.