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/Pillow、scikit-image、matplotlib、pyvips以传统的 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)