opencv python将图像读取为RGB

S. *_*dal 3 python opencv image-processing

是否可以将 opencv(使用 python)作为默认读取图像作为 RGB 的顺序?在 opencv 文档中 imread 方法以 BGR 的顺序返回图像,但在代码中 imread 方法以 RGB 顺序返回图像?我没有做任何转换过程。刚刚使用 imread 方法并显示在屏幕上。它在 Windows 图像查看器上显示。是否可以 ?

编辑 1: 我的代码如下。左侧 cv.imshow() 方法和另一个 plt.imshow() 方法。

cv2.imshow() 方法将图像显示为 RGB,plt 将其显示为 opencv 读取 (BGR) 图像。

image_file = 'image/512-2-1001-18-RGB.jpg'
# img = imp.get_image(image_file)

img = cv2.imread(image_file)
plt.imshow(img)
plt.show()

cv2.imshow('asd', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

编辑 2: 一些 opencv imshow 方法如何将图像显示为下面的 RGB 我附加了图像的第一个像素值,下一个图像是 photoshop 像素值

在此处输入图片说明

在此处输入图片说明

编辑 3: 下面只是读取图像和 imshow 和第二个图像是原始 RGB 图像。

在 imshow 方法图像看起来与原始图像相同后,这让我很困惑

在此处输入图片说明

按RGB顺序的原始图像。

在此处输入图片说明

Mar*_*ell 11

OpenCV本身是完全一致的。它使用 BGR 顺序的通道将图像读入 Numpy 数组,将图像按 BGR 顺序保存,cv2.imshow()cv2.imwrite()期望图像按 BGR 顺序排列。您所有的 JPEG/PNG/BMP/TIFF 文件在磁​​盘上保持其正常的 RGB 顺序。

其他库,例如PIL/Pillowscikit-imagematplotlibpyvips以传统的 RGB 顺序在内存中存储图像。

因此,如果将OpenCV与任何其他库混合使用,只会出现颜色问题。如果您从任何其他人进入/进入OpenCV,您将需要颠倒通道顺序。无论哪种方式都是相同的过程,您正在交换第一个和第三个通道:

RGBimage = BGRimage[...,::-1]
Run Code Online (Sandbox Code Playgroud)

或者

BGRimage = RGBimage[...,::-1]
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用OpenCV cvtColor()进行转换:

RGBimage = cv2.cvtColor(BGRimage, cv2.COLOR_BGR2RGB)
Run Code Online (Sandbox Code Playgroud)

您不必每次都在新变量中制作完整副本。假设您使用OpenCV读取图像,显然以OpenCV BGR顺序,并且您想用 简单地显示它matplotlib,您可以在传递它时反转通道:

# Load image with OpenCV and process in BGR order
im = cv2.imread(something)

# Briefly display with matplotlib, which will want RGB order
plt.imshow(img[...,::-1])
plt.show()

# Carry on processing in BGR order with OpenCV
...
Run Code Online (Sandbox Code Playgroud)