我试图用移位方法显示位平面图像。 但是,对于所有子图,我总是得到全黑图像。
import skimage.io as io
import skimage.util as util
import numpy as np
from matplotlib import pyplot as plt
from skimage.color import rgb2gray
import skimage.filters as fl
path = 'D:/Users/user/PycharmProjects/Image_Processing/Data/16.png'
w = io.imread(path)
# convert the colorful image to a grey scale image
gray = rgb2gray(w)
plt.imshow(gray, cmap=plt.get_cmap('gray'), vmin=0, vmax=1)
plt.show()
# bit shift for creating bit plane images
bps = [(np.uint8(gray) >> i) % 2 for i in range(8)]
# plot 8 subplots to show the result
for i in range(8):
plt.subplot(3, 3, i+1)
# add color map to assure the present color is in grey scale
io.imshow(bps[i], , cmap=plt.get_cmap('gray'))
plt.axis('off')
plt.show()
执行结果也会有一些警告:
D:\ Users \ user \ Anaconda3 \ python.exe D:/Users/user/PycharmProjects/Image_Processing/read_image.py D:\ Users \ user \ Anaconda3 \ lib \ site-packages \ skimage \ io_plugins \ matplotlib_plugin.py:75:UserWarning:图片数据范围低;显示具有拉伸对比度的图像。 warn(“图像数据范围低;用”
显示图像以退出代码0结束的过程
顺便说一句,如果我使用了otsu,yen,li中的过滤器和阈值。 我会得到预期的结果。
thresh = fl.threshold_otsu(gray)
binary = gray >= thresh
io.imshow(binary)
plt.show()
您能告诉我原始方法在哪里出错吗? 在其他一些线程中,提到了将图片从一种类别转换为另一种类别的损失。 而且,我也可以通过使用纯opencv方法获得成功的结果。
我已经检查了以下相关线程,但是我仍然不知道如何解决此问题:
谢谢您的帮助!
答案 0 :(得分:0)
我发现我滥用了numpy无符号整数转换,因为原始的灰色数组包含0到1之间的无符号浮点数。 首先,我需要将灰度强度设置为大于1的浮点数。
bps = [(np.uint8(gray*255) >> i) % 2 for i in range(8)]
然后,问题解决了。