如何用Python结合OpenCV将图片转换为十进制值存储到文本文档
嘿,我完全懂你的需求——把图片转换成纯十进制数值然后存到文本文档里对吧?之前用b64encode得到的是字符串格式,确实不是你要的十进制数字序列。下面我给你两种实用的实现方式,都是基于Python和OpenCV来完成的:
方法1:提取图像像素的十进制数值
如果你的目标是获取图像中每个像素的颜色通道值(比如RGB/BGR的十进制整数),可以用这种方式:
import cv2 # 读取图像,注意OpenCV默认以BGR格式加载 img = cv2.imread("你的图片路径.jpg") if img is None: print("无法读取图像,请检查文件路径是否正确!") else: # 获取图像的高、宽、通道数 height, width, channels = img.shape # 打开文本文件准备写入 with open("像素十进制值.txt", "w", encoding="utf-8") as f: # 遍历每一行像素 for y in range(height): # 遍历该行的每个像素 for x in range(width): # 获取当前像素的BGR通道值,每个值本身就是0-255的十进制整数 b, g, r = img[y, x] # 按RGB顺序写入,每个像素占一行,你可以根据需求调整格式 f.write(f"{r} {g} {b}\n") # 也可以选择把整行像素的所有值用空格分隔后写入一行,比如: # f.write(' '.join(map(str, img[y].flatten())) + '\n')
如果是灰度图像,img会是单通道矩阵,直接取img[y, x]就能得到0-255的十进制灰度值,逻辑更简单。
方法2:将整个图像文件的字节转换为十进制值
要是你需要的是把图像文件本身的二进制字节转换成对应的十进制数值(每个字节对应0-255的整数),可以用这种直接读取文件字节的方式:
import os image_path = "你的图片路径.jpg" if not os.path.exists(image_path): print("指定的图像文件不存在,请检查路径!") else: # 以二进制模式读取图像文件的原始字节 with open(image_path, "rb") as img_file: byte_content = img_file.read() # 把每个字节转换成十进制整数 decimal_values = [int(byte) for byte in byte_content] # 写入文本文件 with open("文件十进制值.txt", "w", encoding="utf-8") as f: # 每个数值单独占一行,也可以用空格分隔所有数值 f.write('\n'.join(map(str, decimal_values))) # 如果想用空格分隔:f.write(' '.join(map(str, decimal_values)))
补充说明
之前你用的b64encode是把二进制数据编码成了ASCII字符串,本质是一种压缩表示方式,和你需要的十进制数值序列不是一回事,所以上面两种方法才是贴合你需求的解决方案。另外要注意,如果是高分辨率图像,生成的文本文件会比较大,比如1920×1080的RGB图像,光像素值就有600多万个,存储时要考虑空间问题~
内容的提问来源于stack exchange,提问作者Tariq TALBI
相关产品推荐
相关产品推荐

