在python中使用OpenCV拆分图像

Sag*_*gar 5 python opencv python-2.7

我有一个N图像,并希望在python中使用CV2将其分成三个RGB通道图像.

我也想要一个好的文档,我可以找到openCV的所有功能,因为我是OpenCV的新手.

jab*_*edo 22

这就像使用加载图像一样简单cv2.imread,然后使用cv2.split:

>>> import cv2
>>> import numpy as np
>>> img = cv2.imread("foo.jpg")
>>> b,g,r = cv2.split(img)
Run Code Online (Sandbox Code Playgroud)

OpenCV文档可从docs.opencv.org获得

  • 如果要保存蓝色通道:`cv2.imwrite('blue_channel.jpg', b)` (2认同)
  • 为了安全起见,您可以使用 `cv2.imread("foo.jpg", 1)` 强制加载到 3 通道数组中 (2认同)

Moh*_*ani 5

文档教程中所述,就性能(时间)而言,cv2.split()是一项昂贵的操作,因此首选numpy索引:

import cv2
import numpy as np
img = cv2.imread("foo.jpg")
b = img[:,:,0]
g = img[:,:,1]
r = img[:,:,2]
Run Code Online (Sandbox Code Playgroud)

请记住,opencv将图像读取为BGR而不是RGB

  • 您误解了文档(您链接到的页面)。它说:如果你想在 1 个颜色通道上做一些基本的事情(例如将所有红色设置为零),只需使用 numpy 索引,例如“img[:,:,2] = 0”,或者你只想要其中一个三个通道,使用 `b = img[:,:,0]`。在这两种情况下,提取 3 个通道是没有意义的。但如果您确实想要获得所有 3 个通道,那么使用 split 函数应该会更快。 (3认同)