Python 3.x 将3通道RGB图像转换为1通道二进制图像

Python 3.x 将3通道RGB图像转换为1通道二进制图像,python-3.x,numpy,opencv,image-processing,Python 3.x,Numpy,Opencv,Image Processing,我可以将RGB图像转换为二进制图像,但其尺寸仍然太大(1280x720x3)。由于二进制图像的每个像素只有一个0或1的值,我想将其维数降低到(1280x720x1),这样我就不必处理内存问题(因为我正在处理成千上万的图像) 如何修改上述代码以将保存图像的尺寸从(1280x720x3)更改为(1280x720x1)?使用np.newaxis或np.restrape将(H,W)转换为(H,W,1) (1) 使用np.newaxis添加新维度 (2) 使用“重塑”更改尺寸 现在看看结果 从各种来源来看

我可以将RGB图像转换为二进制图像,但其尺寸仍然太大
(1280x720x3)
。由于二进制图像的每个像素只有一个0或1的值,我想将其维数降低到
(1280x720x1)
,这样我就不必处理内存问题(因为我正在处理成千上万的图像)


如何修改上述代码以将保存图像的尺寸从
(1280x720x3)
更改为
(1280x720x1)

使用
np.newaxis
np.restrape
将(H,W)转换为(H,W,1)

(1) 使用np.newaxis添加新维度

(2) 使用“重塑”更改尺寸

现在看看结果


从各种来源来看,这是将rgb转换为灰度的一种体现

# num_92 gray scale image from rgb
def num_92():
    """num_92... gray-scale image from rgb
    :Essentially gray = 0.2989 * r + 0.5870 * g + 0.1140 * b
    : np.dot(rgb[...,:3], [0.299, 0.587, 0.114])
    : http://stackoverflow.com/questions/12201577/how-can-i-convert
    :       -an-rgb-image-into-grayscale-in-python
    : https://en.m.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale
    : see https://en.m.wikipedia.org/wiki/HSL_and_HSV
     """
    frmt = """
    :---------------------------------------------------------------------:
    {}
    :---------------------------------------------------------------------:
    """
    import matplotlib.pyplot as plt
    a = np.arange(256).reshape(16, 16)
    b = a[::-1]
    c = np.ones_like(a)*128
    rgb = np.dstack((a, b, c))
    gray = np.dot(rgb[..., :3], [0.2989, 0.5870, 0.1140])
    plt.imshow(gray, cmap=plt.get_cmap('gray'))
    plt.show()
    args = [num_92.__doc__]
    print(frmt.format(*args))
重命名def,但在此期间,使用

num_92()
或者玩弄食物

import matplotlib.pyplot as plt
a = np.arange(256).reshape(16, 16)
b = a[::-1]
c = np.ones_like(a)*128
rgb = np.dstack((a, b, c))
plt.imshow(rgb, cmap=plt.get_cmap('hot'))
plt.show()

但是如果你平均重缩放的rgb,你会得到不同的图片,所以这取决于你想要什么

avg = np.average(rgb, axis=-1)
avg.shape
(16, 16)
plt.imshow(avg, cmap=plt.get_cmap('gray'))
plt.show()

???你真正的目的是什么?获取
WxHx1
的二进制文件还是仅仅为了降低内存成本?@消音器获取WxHx1的二进制文件我在谷歌搜索“opencv binarize”时得到的第二个链接是。看起来可能会有帮助。
>>> binary
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
>>> new_binary
array([[[ 0.],
        [ 0.],
        [ 0.],
        [ 0.]],

       [[ 0.],
        [ 0.],
        [ 0.],
        [ 0.]],

       [[ 0.],
        [ 0.],
        [ 0.],
        [ 0.]]])
# num_92 gray scale image from rgb
def num_92():
    """num_92... gray-scale image from rgb
    :Essentially gray = 0.2989 * r + 0.5870 * g + 0.1140 * b
    : np.dot(rgb[...,:3], [0.299, 0.587, 0.114])
    : http://stackoverflow.com/questions/12201577/how-can-i-convert
    :       -an-rgb-image-into-grayscale-in-python
    : https://en.m.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale
    : see https://en.m.wikipedia.org/wiki/HSL_and_HSV
     """
    frmt = """
    :---------------------------------------------------------------------:
    {}
    :---------------------------------------------------------------------:
    """
    import matplotlib.pyplot as plt
    a = np.arange(256).reshape(16, 16)
    b = a[::-1]
    c = np.ones_like(a)*128
    rgb = np.dstack((a, b, c))
    gray = np.dot(rgb[..., :3], [0.2989, 0.5870, 0.1140])
    plt.imshow(gray, cmap=plt.get_cmap('gray'))
    plt.show()
    args = [num_92.__doc__]
    print(frmt.format(*args))
num_92()
import matplotlib.pyplot as plt
a = np.arange(256).reshape(16, 16)
b = a[::-1]
c = np.ones_like(a)*128
rgb = np.dstack((a, b, c))
plt.imshow(rgb, cmap=plt.get_cmap('hot'))
plt.show()
avg = np.average(rgb, axis=-1)
avg.shape
(16, 16)
plt.imshow(avg, cmap=plt.get_cmap('gray'))
plt.show()