【发布时间】:2021-11-17 05:36:54
【问题描述】:
我有一组分辨率非常低的图片(在 .png 中,但我可以轻松地将它们转换为其他图片)。它们都只有黑色或白色像素,如二维码。
我想要的是能够将它们读取为二进制矩阵(黑色像素为 1,白色像素为 0)。
我不需要比这更花哨的东西,我应该用什么?
【问题讨论】:
我有一组分辨率非常低的图片(在 .png 中,但我可以轻松地将它们转换为其他图片)。它们都只有黑色或白色像素,如二维码。
我想要的是能够将它们读取为二进制矩阵(黑色像素为 1,白色像素为 0)。
我不需要比这更花哨的东西,我应该用什么?
【问题讨论】:
您好,您可以使用 PIL 读取图像,然后使用 numpy 将其转换为矩阵
from PIL import Image
import numpy as np
im = Image.read("imageName.ext")
im_mat = np.asarray(im)
或者,您可以使用 opencv 一步完成所有操作
导入 cv2
img = cv2.imread("imageName.ext")
在这两种情况下,您都将拥有一个大小为WxHxC 的矩阵,其中 H 为高度(以像素为单位),W 为宽度,c 为通道数(3 或 4,具体取决于是否存在用于透明度的 alpha)。
如果您的图像是黑白的,并且您只想要一个大小为WxH 的矩阵,则使用一个通道
img = img_mat[:,:,0] #8-bit matrix
最后你可以二值化,给出一个本影或仅仅通过比较
bin = img> 128
或
bin = img == 255
我更正了最后一行我有一个错字
【讨论】:
bin = img ==255