如何仅分析图像的一部分?

小鸡91

我想分析图像的特定部分,例如,我想着眼于右下200x200区域并计算所有黑色像素,到目前为止,我有:

im1 = Image.open(path)
rgb_im1 = im1.convert('RGB')
for pixel in rgb_im1.getdata():
马克·谢切尔

尽管您可以通过裁剪和一对for循环来完成此操作,但这确实很慢且不理想。

我建议您使用Numpy,因为它非常常用,非常强大且非常快。

这是一个400x300黑色矩形,带有1像素的红色边框:

在此处输入图片说明

#!/usr/bin/env python3

import numpy as np
from PIL import Image

# Open the image and make into Numpy array
im = Image.open('image.png')
ni = np.array(im)

# Declare an ROI - Region of Interest as the bottom-right 200x200 pixels
# This is called "Numpy slicing" and is near-instantaneous https://www.tutorialspoint.com/numpy/numpy_indexing_and_slicing.htm
ROI = ni[-200:,-200:]

# Calculate total area of ROI and subtract non-zero pixels to get number of zero pixels
# Numpy.count_nonzero() is highly optimised and extremely fast
black = 200*200 - np.count_nonzero(ROI)
print(f'Black pixel total: {black}')

样本输出

Black pixel total: 39601

是的,您可以将其缩短,例如:

h, w = 200,200 
im = np.array(Image.open('image.png'))
black = h*w - np.count_nonzero(ni[-h:,-w:])

如果要调试,可以将ROI放入PIL图像中,然后显示。因此,只要在获得投资回报率后就可以在任何地方使用此行:

# Display image to check
Image.fromarray(ROI).show()

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章