【问题标题】:Separating image into channels by using numpy使用 numpy 将图像分成通道
【发布时间】:2019-07-24 08:55:36
【问题描述】:

我想分离我的图像通道。然后,我想对每一个应用 Otsu Thresholding,最后将它们合并在一起。但是,在我的代码的第 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

这是我的代码:

morph = mypic.copy()
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 1))
myImage = cv2.morphologyEx(morph, cv2.MORPH_GRADIENT, kernel)
myImageChannels = np.split(np.asarray(gradient_image), 3, axis=2)
for channels in range(3):
  _, myImageChannels[channels] = cv2.threshold(myImageChannels[channels],
                                               0,
                                               255,
                                               cv2.THRESH_OTSU | cv2.THRESH_BINARY)

【问题讨论】:

  • 你的数据矩阵是方阵吗???

标签: python numpy opencv opencv3.0


【解决方案1】:

为什么不是更简单的方法?

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 谢谢,但您所做的是“Upvote”,您需要选择刚好低于投票数的“Check”符号。当你有时间时,接受你的其他问题也许会很好,但当然前提是他们的回答让你满意:)
  • 哦,我明白了。我在想,版主给了正确答案的检查按钮:(
猜你喜欢
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
  • 2015-02-20
  • 2020-03-18
  • 2020-01-15
  • 2021-05-07
相关资源
最近更新 更多