我试图在彩色通道中获取图像,但不是灰度图像。以下是代码: -
img = cv2.imread("image.jpg")
blue = img[:,:,0].copy() # Blue channel image
blue[:,:,1] = 0 # Making green channel 0
blue[:,:,2] = 0 # Making red channel 0
但是,当我尝试制作“image.jpg”蓝色通道的绿色通道和红色通道0时,它会指向第3行和第4行的错误。
错误:IndexError: too many indices for array
我在Mac上使用OpenCV 3.3和python 3.6。
答案 0 :(得分:3)
好的,你走了:
import cv2
import numpy as np
def get_channel(im, n):
if 0 <= n <= 2 and im.shape[2]==3:
new_im = np.zeros_like(im)
new_im[:, :, n] = im[:, :, n]
return new_im
return False
im = cv2.imread(your_image_filename_goes_here)
cv2.imshow("Chanel", get_channel(im, 0))
cv2.waitKey(0)
cv2.destroyAllWindows()
在您的示例中,blue
具有形状(x,y),而img
具有形状(x,y,3)。这就是显示蓝色的原因是灰度,因为作为二维数组opencv并不知道它是蓝色通道。
彩色图像只是三个&#34;灰度图像&#34;虽然它们并不像普通灰度图像那样代表光强度,但它们代表了某些颜色的光强度。并且三个通道的组合给出了颜色。
灰度图像只是一个整数的二维数组(3,3):
y y y
y y y
y y y
RGB(或OpenCV BGR)图像是三维整数数组(3,3,3):
B B B G G G R R R
B B B G G G R R R
B B B G G G R R R
如果您只是拍摄BGR图像的第一个频道,那么您正在拍摄(3,3):
B B B
B B B
B B B
对于与灰度图像相同的OpenCV。
答案 1 :(得分:3)