Python 使用numpy将图像分割成通道

Python 使用numpy将图像分割成通道,python,numpy,opencv,opencv3.0,Python,Numpy,Opencv,Opencv3.0,我想分离图像的通道。然后,我想对每一个应用Otsu阈值,最后,将它们合并在一起。但是,在代码的第4行中,它给出了以下错误: File "C:/Users/Berke/PycharmProjects/goruntu/main.py", line 28, in <module> image_channels = np.split(np.asarray(gradient_image), 3, axis=2) File "C:\Users\Berke\PycharmProjects\

我想分离图像的通道。然后,我想对每一个应用Otsu阈值,最后,将它们合并在一起。但是,在代码的第4行中,它给出了以下错误:

File "C:/Users/Berke/PycharmProjects/goruntu/main.py", line 28, in <module>
    image_channels = np.split(np.asarray(gradient_image), 3, axis=2)
File "C:\Users\Berke\PycharmProjects\goruntu\venv\lib\site-packages\numpy\lib\shape_base.py", line 846, in split
    N = ary.shape[axis]
IndexError: tuple index out of range

为什么不更简单一点呢?

import numpy as np
import cv2

original_image = cv2.imread(path) #expect [X,Y,3] shape
#or
original_image = np.asarray(gradient_image)

otsu_image = np.zeros(shape=original_image.shape)
for channel in range(3):
    _,otsu_image[:,:,channel]= cv2.threshold(original_image[:,:channel],0,255,cv2.THRESH_OTSU | cv2.THRESH_BINARY)

通过此
[:,:,channel]
索引选择,您基本上可以访问特定频道的图像层,而无需对图像执行任何特殊操作。当然,您可以将阈值图像指定给该层,因为一个通道层与灰度图像具有相同的尺寸

为什么不更简单呢?

import numpy as np
import cv2

original_image = cv2.imread(path) #expect [X,Y,3] shape
#or
original_image = np.asarray(gradient_image)

otsu_image = np.zeros(shape=original_image.shape)
for channel in range(3):
    _,otsu_image[:,:,channel]= cv2.threshold(original_image[:,:channel],0,255,cv2.THRESH_OTSU | cv2.THRESH_BINARY)

通过此
[:,:,channel]
索引选择,您基本上可以访问特定频道的图像层,而无需对图像执行任何特殊操作。您当然可以将阈值图像指定给该层,因为1通道层与灰度图像的尺寸相同

您的数据矩阵是平方矩阵吗?您的数据矩阵是平方矩阵吗?明白了,而不是分割函数。我可以使用[;,;,索引]表示法。谢谢。@TürkerBerkeYıldırım我注意到你在Stackoverflow上发布的问题没有“接受”任何答案。如果有人回答了你的问题,而你对此感到满意,那么这个网站就可以运行,提问者会接受答案以供进一步参考。我感到满意,并给出+1。我怎么才能“接受”答案?@TürkerBerkeYıldırım谢谢,但你所做的是“向上投票”,你需要选择刚好低于投票数的“检查”符号。也许当你有时间的时候,接受你的其他问题会很好,但当然只有当他们的答案让你满意的时候:)哦,我明白了。我在想,主持人给出了正确答案的检查按钮:(明白了,而不是分割函数。我可以使用[;,;,索引]注释。谢谢。@TürkerBerkeYıldırım我注意到你没有“接受”你在Stackoverflow上发布的任何问题的答案。如果有人回答了你的问题,你感到满意,这个网站就工作了,提问者接受答案以供进一步参考。我感到满意,并给出+1。我如何“接受”回答?@TürkerBerkeYıldırım谢谢,但你所做的是“向上投票”,你需要选择刚好低于票数的“检查”符号。也许你有时间接受你的其他问题会很好,但当然前提是他们的答案让你满意:)哦,我明白了。我在想,主持人给出了正确答案的检查按钮:(