gpt4 book ai didi

python - python 中的 opencv : a very strange error. 使用 np.zeros 创建新图像和简单地复制现有图像有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-03 22:54:50 25 4
gpt4 key购买 nike

假设我在 python 中加载了一个图像。我明白,因为 python 中的彩色图像只不过是一个三维数组,所以我试图创建一个新图像,它只包含从加载图像中选择的几个像素值。但是,这确实效果不佳。请允许我用一个非常简单的例子来演示。

假设我的原图“img”是一个20x20x3的矩阵,所有元素都为0。

img2 = np.zeros(img.shape)
img2[0:5,0:5] = [100,0,0]

有了这个,我假设 imshow 上的输出应该有一个涂黑的图像,但左上角有一个蓝色方 block 。这运作良好。

但是,如果我改成

img2 = np.zeros(img.shape)
img2[0:5,0:5] = [100,100,1]

这在左上角显示了一个完全白色的方 block ,其余部分被涂黑了。但是,BGR = [100,100,1](python 中的 opencv 在 BGR 空间而不是 RGB 中处理图像)不应该是白色的!

此问题已立即修复

img2 = img.copy()
img2[0:5,0:5] = [100,100,1]

有了这个,我在左上角得到了一个具有正确像素值的正方形。

有人可以让我知道创建一个与原始图像形状完全相同的新 numpy ndarray 和填写所需值之间的根本区别是什么吗?并简单地复制原始 img 矩阵?为什么它适用于 BGR = [100,0,0] 但不适用于 [100,100,1]?

谢谢

最佳答案

您能解释一下您是如何创建 img 的吗?不同行为的一个原因可能是 img2 没有与 img 相同的数据类型 (img2.dtype),并且可视化你使用的函数(你能告诉我们你调用哪个函数来显示图像吗?)当你传递整数类型或浮点类型的图像时有不同的行为(比如,对于整数类型,颜色范围将是介于 0 和 255 之间,而对于 float ,它将介于 img2.min()img2.max() 之间。

当您使用 np.zeros 时,如果您未指定 dtype 关键字参数,则输出数组将具有 float dtype。另一方面,使用 np.zeros_like 保持与输入数组相同的 dtype。我怀疑在您的示例中 img 是整数图像,并且您的可视化过程对于整数和浮点图像的行为不同。

关于python - python 中的 opencv : a very strange error. 使用 np.zeros 创建新图像和简单地复制现有图像有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32575605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com