gpt4 book ai didi

python | cv2.imshow() 加载数组作为 BGR?

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

我已经将一些数据记录为 npy 文件。我尝试显示图像 (data[0]) 以检查它是否适用于以下代码

import numpy as np
import cv2

train_data = np.load('c:/data/train_data.npy')

for data in train_data:
output = data[1]
# only take the height, width and channels of the 4 dimensional array
image = data[0][0, :, :, :]
# image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
cv2.imshow('test', image)
print('output {}'.format(output))
if cv2.waitKey(25) & 0xFF == ord('q'):
cv2.destroyAllWindows()
break

但是如果我显示的图像没有 image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) 行,图像似乎是基于 BGR 的。如果我将此行注释到代码中,图像就会正确显示。

My question: Does this observation imply that the image array is already in BGR format? Or does this imply that cv2.imshow() does by default interprete the array as BGR array?

最佳答案

Matplotlib 和 Numpy 将图像读入 RGB 并将其作为 RGB 进行处理。 OpenCV 将图像读入 BGR 并将其作为 BGR 进行处理。这两个系统都可以识别一系列输入类型,可以在几乎任何类型的色彩空间之间进行转换,并支持各种图像处理任务。

这提供了三种不同的方式来加载图像(plt.imread()ndimage.imread()cv2.imread()),两个处理数据的系统(Numpy 和 CV2),以及两种显示图像的方式(plt.imshow()cv2.imshow()),实际上,如果您想将图像视为二维数字数据加上每种颜色的另一个维度,则还有第三种使用 pyplot 显示图像的方法。

这里有一些简单的代码来演示其中的一些内容。

#!/usr/bin/python

import matplotlib.pyplot as plt
from scipy.ndimage import imread
import numpy as np
import cv2

img = imread('index.jpg')
print( "img data type: %s shape %s"%( type(img), str( img.shape) ) )

plt.imshow( img )
plt.title( 'pyplot as read' )
plt.savefig( 'index.plt.raw.jpg' )

cv2.imshow('cv2, read by numpy', img)
cv2.imwrite('index.cv2.raw.jpg',img)

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

cv2.imshow('after conversion', img)
cv2.imwrite('index.cv2.bgr2rgb.jpg',img)

这会生成以下文本行和以下三个示例图像文件。

img data type: <type 'numpy.ndarray'> shape (225, 225, 3)

正确的图像上面的圆圈是红色的。我们使用 ndimage.imread() 将图像读入一个 numpy 数组,并使用 Pyplot 的 imshow() 显示它并获得正确的图像。然后我们用 cv2.imshow() 显示它,我们看到红色 channel 被解释为蓝色 channel ,反之亦然。然后我们转换颜色空间,我们看到 cv2.imshow() 现在可以正确解释结果。

plt.imshow(),由 ndimage() 读取:

plt.imshow(), as read by ndimage()

cv2.imshow(),ndimage读取的图像:

cv2.imshow(), the image as read by ndimage

cv2.imshow(),从 RGB 转换为 BGR 后:

cv2.imshow(), after converting from RGB to BGR

关于 python | cv2.imshow() 加载数组作为 BGR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54442808/

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