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

Python 如何仅分析图像的一部分?,python,python-imaging-library,Python,Python Imaging Library,我想分析图像的一个特定部分,作为一个例子,我想集中在右下角的200x200部分,并计算所有黑色像素,到目前为止我有: im1 = Image.open(path) rgb_im1 = im1.convert('RGB') for pixel in rgb_im1.getdata(): 您可以尝试将图像裁剪到所需的特定部分:- img = Image.open(r"Image_location") x,y = img.size img = img.crop((x-200, y-200, x, y

我想分析图像的一个特定部分,作为一个例子,我想集中在右下角的200x200部分,并计算所有黑色像素,到目前为止我有:

im1 = Image.open(path)
rgb_im1 = im1.convert('RGB')
for pixel in rgb_im1.getdata():

您可以尝试将图像裁剪到所需的特定部分:-

img = Image.open(r"Image_location")
x,y = img.size
img = img.crop((x-200, y-200, x, y))
上面的代码获取输入图像,并将其裁剪到右下角200x200像素。(确保图像尺寸大于200x200,否则将发生错误)

原始图像:-

裁剪后的图像:-

你可以使用这个裁剪图像来计算黑色像素的数量,这取决于你的用例,你认为它是一个强>黑<强>像素(一个离散值(如0, 0, 0)或一个范围/阈值(0,15,0,15,0—15))。


p.S.:-最终图像的尺寸始终为200x200像素。

虽然您可以通过裁剪和一对
循环来实现这一点,但这非常缓慢,也不理想

from PIL import Image
img = Image.open("ImageName.jpg")
crop_area = (a,b,c,d)
cropped_img = img.crop(crop_area)
我建议您使用Numpy,因为它非常普遍,功能非常强大,速度非常快

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

样本输出

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()

回答得好。这一天没什么想法。。。如果你对你喜欢的问题进行投票,这会鼓励更多的问题,这意味着我们都可以学到更多,也意味着OP有足够的分数来投票并接受你的答案。向上投票是免费的,并鼓励好东西:-)谢谢,告诉我这个信息。我非常感谢。我期待着以后做你提到的事情
# Display image to check
Image.fromarray(ROI).show()