您好,我正在尝试使用Python进行学校项目,而且我遇到了困难,所以我想要一些帮助。 我尝试导入图像并读取它并导出十六化学文本文件。
制作了这张图片让我们假装这是一个9像素的图像。我想导入这个图像并将其转换为一个文本文件,读取像
这样的东西FF0000 0000FF 00FF00
0000FF FF0000 00FF00
00FF00 FF0000 0000FF
使用Python可以实现吗?或者我还需要其他编程语言吗? 先谢谢你们!(对不起,如果我的英语不好)
答案 0 :(得分:2)
你可以在命令行上使用 ImageMagick 而不需要Python,它可以安装在大多数Linux发行版上,可用于macOS和Windows。
它适用于PNG,JPEG和大约200种其他图像类型。让我们制作一个示例图片:
let actionSheet = this.actionSheetCtrl.create({
title: 'Modify your album',
buttons: [
{
text: 'Destructive',
role: 'destructive',
handler: () => {
console.log('Destructive clicked');
}
},{
text: 'Archive',
handler: () => {
console.log('Archive clicked');
}
},{
text: 'Cancel',
role: 'cancel',
handler: () => {
console.log('Cancel clicked');
}
}
]
});
actionSheet.present();
让我们放大它以便你可以看到它(我本可以一次性完成):
convert xc:red xc:blue xc:lime +append \
\( xc:blue xc:red xc:lime +append \) \
\( xc:lime xc:red xc:blue +append \) \
-append start.png
现在问题,我可以将其转换为原始RGB(通过解释所有图像大小,调色板,压缩和标题)并将其传递给convert start.png -scale 400x start.png
以进行十六进制格式化:
xxd
如果您想从前面剥离地址并从末尾剥离点,您可以使用:
convert start.png -depth 8 rgb: | xxd -g3 -c9 -u
00000000: FF0000 0000FF 00FF00 .........
00000009: 0000FF FF0000 00FF00 .........
00000012: 00FF00 FF0000 0000FF .........
convert start.png -depth 8 rgb: | xxd -g3 -c9 -u | sed 's/ .*//; s/^.*: //'
FF0000 0000FF 00FF00
0000FF FF0000 00FF00
00FF00 FF0000 0000FF
命令说明了"你看到两个空格的任何地方,删除它们以及随后的所有空格。删除任何内容,包括冒号后跟空格。" 。
或者普通转储可能更好:
sed
注意:如果使用 ImageMagick v7 +,请在上述所有示例中将convert start.png -depth 8 rgb: | xxd -g3 -c9 -u -p
FF00000000FF00FF00
0000FFFF000000FF00
00FF00FF00000000FF
替换为convert
。
答案 1 :(得分:2)
我真的不会说Python,但我试图学习一些,这似乎就是你所要求的。我可能不是Pythonic,但至少它只使用PIL,它比OpenCV更小,更容易安装!
#!/usr/local/bin/python3
import sys
from PIL import Image
# Check image supplied as argument
if len(sys.argv)!=2:
sys.exit("ERROR: Please specify a file")
# Load image
img=Image.open(sys.argv[1])
# Retrieve dimensions
w,h=img.size
# Make RGB if palettised
if img.mode=="P":
img=img.convert('RGB')
p=img.load()
for y in range(0,h):
for x in range(0,w):
r,g,b=p[x,y]
str="%02x%02x%02x "%(r,g,b)
print(str,end='')
print()
答案 2 :(得分:1)
opencv可以简单地读取图像。
import cv2
img = cv2.imread('image.png')
print(img.shape)
cy=img.shape[0]
cx=img.shape[1]
f = open('img.txt', 'w')
for row in img:
for col in row:
str="%02x%02x%02x"%(col[0], col[1], col[2])
f.write(str)
f.close()