如何使用matplotlib获取像素的rgb值?

vatpfxk5  于 2022-12-23  发布在  其他
关注(0)|答案(1)|浏览(194)

我需要找到图像中所有的红色像素,然后用这些红色像素创建自己的图像。到目前为止,我一直在尝试使用matplotlib,因为我对它非常陌生。

def find_red_pixels(map, upper_threshold=100, lower_threshold =50):
    """Finds all red pixels of the "map" image and outputs a binary image file "map-red-pixels.jpg" """
    red_map = []
    for row in map:
        for pixel in row:
            print(pixel)

我是一个全新的图像处理的新手,并且已经尝试过了,但是我不明白输出为像素的值[0.0.01]等意味着什么。有简单的方法可以做到这一点吗?

r8xiu3jd

r8xiu3jd1#

首先要了解的是读入图像时图像在数组中的表示方式。下面我读入一个320 x160的彩虹图像:

>>> img = plt.imread('rainbow.png')
>>> img.shape
    (160, 320, 4)

这显示了数组的维度--注意元组的最后一个元素是4,这些值代表红色像素值、绿色像素值、蓝色像素值和透明度或alpha值。
我们想找到具有特定红色值的像素,所以我们只对第一个感兴趣。让我们把它们分开,这样我们就可以处理它们了:

>>> r = img[:,:,0]

这将隔离与像素值的红色相关的阵列部分,由01之间的值表示。现在,我们要隔离具有特定红色值的像素位置。我们可以使用np.where执行此操作。在新数组r中查找值大于0.5的元素(此值可以更改以满足upper_thresholdlower_threshold的要求),并将其替换为1,否则替换为0;从而产生二进制图像。

>>> binary_img = np.where(r > 0.5, 1, 0)

最后,我们只需要使用plt.imsave保存此图像:

>>> plt.imsave('rainbow_red.png', binary_img , cmap='gray')

给出以下结果:

相关问题