def action203_function(self):
pixmap = self.label.pixmap()
image = pixmap.toImage()
codeLib = '''@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,"^`'. '''
count = len(codeLib)
codePic = ""
for h in range(0, pixmap.height()):
for w in range(0, pixmap.width()):
color = image.pixelColor(w, h)
r, g, b, a = color.getRgb() # a为透明度
# gray = int(r*0.2989 + g*0.5870 + b*0.1140)
gray = int(0.2126*r + 0.7152*g + 0.0722*b)
unit = 256 / count
codePic += codeLib[int(gray//unit)]
codePic = codePic + "\r\n"
self.label.setText(codePic)
代码不全。我只把我想问的部分放上来了。
这个代码的功能是根据qlabel上的图片的灰度图,按灰度图上各像素点数值,从字符集中选择字符,生成图片文本中对应像素点文本;
可问题是生成的像素点文本与原图一点也不像。我看别人写的就能看出原图。为什么我的不行?应该怎么优化?
第一张是原图,第二张是灰度图,第三张是像素文本。
以下两张图片是别人做出来的效果,也是我想要的效果。
可能是字符集中的字符数量不够多,或者字符的选择不够准确。可以尝试增加字符集中的字符数量,尝试选择更准确的字符来表示图像的不同灰度值。或者调整算法中的参数,例如颜色范围和字符数。