使用 numpy 将图像分成通道
Separating image into channels by using numpy
我想分离图像的通道。然后,我想对每一个应用 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)
为什么没有更简单的方法?
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 个通道层具有与灰度图像相同的维度
我想分离图像的通道。然后,我想对每一个应用 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)
为什么没有更简单的方法?
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 个通道层具有与灰度图像相同的维度