我有一张图片。我想获得图像中每个对象的周长。例如,in this image,对象的周长为33(边缘处的像素数)。 我编写了以下算法,但这是非常及时的。
有没有人有想法提高算法的速度?
我尝试过:
def cal_perimeter_object(object, image):
peri_ = 0
for pixel_ in image:
if pixel_is_in_neigbor_of_object() is True:
peri_ += 1
return peri_
答案 0 :(得分:1)
正如@Piinthesky在评论中所提到的那样,您知道要找到轮廓的对象的标签是布尔(或标记图像),这是第一步。有很多方法可以做到这一点,其中最简单的方法就是阈值处理。获得带标签的图片后,您可以通过多种方式找到周边 - 例如沿边界的像素数。为了让您在这里开始先行,可以在link放置的图像上进行操作。我使用过scikit-image但你可以使用其他的python库。
# If your python version is not 3.x uncomment line below
#from __future__ import print_function
from skimage.measure import label, regionprops
import skimage.io as io
# read in the image (enter the path where you downloaded it on your computer below
im = io.imread('/home/kola/Downloads/perimeter.png')
# To simplify things I am only using the first channel and thresholding
# to get a boolean image
bw = im[:,:,0] > 230
regions = regionprops(bw.astype(int))
print(regions[0].perimeter)