利用numpy实现图像通道分割

2024-04-26 07:19:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我想分开我的图像的频道。然后,我想对每一个应用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

这是我的密码:

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)

Tags: inpyimagenplinecv2usersfile
1条回答
网友
1楼 · 发布于 2024-04-26 07:19:33

为什么不更简单一点?

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]索引选择,您基本上可以访问特定通道的图像层,而无需对图像做任何特殊处理。当然,您可以将阈值图像指定给该层,因为一个通道层与灰度图像具有相同的尺寸

相关问题 更多 >