【问题标题】:Python - Image from numpy array losing true pixelsPython - 来自numpy数组的图像丢失真实像素
【发布时间】:2016-09-13 04:56:26
【问题描述】:

我有一张人脸的 jpg 图片,我需要逐像素访问图片(知道每个像素的值),并使用某种 DFS 来更改背景颜色。

image = Image.open("pic.jpg")
image = np.array(image)

首先,为什么数组的形状是(473, 354, 3)?这对我来说没有意义。

当我这样做时

plt.imshow(image.reshape(473, -1))
plt.show()

我得到的图片如下所示,其中仅包含红色、蓝色和黄色(以及三种颜色的混合?)

这意味着数组中的值不是我可以可靠地用来做出边缘检测决策的值。

为什么以及我应该怎么做?

我希望像素值反映原始图像的真实颜色,而不是像上面那样。

实际图片中的背景有点白,我希望它们和所有其他像素值保持这种状态,这样我就可以实现我的算法了。

【问题讨论】:

    标签: python image numpy image-processing jpeg


    【解决方案1】:

    3 是因为每种颜色(蓝色、绿色红色)在数组中都有自己的条目。

    对于边缘检测,您最好将图像折叠为黑白。 OpenCV 有 cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 可以解决问题。

    【讨论】:

    • 所以 (473, 354, 3) 的意思是:高度为 473,宽度为 354,数组中的每个值都是一个 3 元组?
    • @Jobs 完全正确。此外,显示的颜色不是真实图片中的颜色,而是显示高值的特定颜色的颜色图。因此,如果您输入尺寸为 (h,w,(RGB)) 的图片,可能只考虑红色值。它将在高值(红色)处显示红色,在低值(红色)处显示蓝色。您可能应该转换为黑白并且不要按字面意思使用颜色(或切换到黑白颜色图)。
    • 非常感谢!这就说得通了。所以现在我已经成功完成了任务 - 将我的图片背景更改为白色。图片的大小从 60 kb 下降到 20 kb。你们知道为什么吗?这是正常/预期的吗? @syntonym 和查尔斯。
    • 你到底做了什么?如果您转换为黑白,您现在在每个数组单元格中都没有一个 3 元组,而是一个值 - 所以大小消耗应该是三分之一,这对您来说似乎是这种情况。好像一切正​​常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    相关资源
    最近更新 更多