开向幼儿园的车 2024-03-27 20:25 采纳率: 81.8%
浏览 3

Python pillow 图处理

python pillow
我打开一张试卷的照片,想处理成黑字白底的样子,就像扫描软件上一样,但是现在有两种方式

一、点处理

    def point_(self, filepath):
        image = Image.open(filepath)
        width, height = image.size
        for x in range(width):
            for y in range(height):
                pixel = (pixel_color[0] * 30 + pixel_color[1] * 59 + pixel_color[2] * 11 + 50) / 100
                if pixel < 101:
                    image.putpixel((x, y), 0)
                else:
                    image.putpixel((x, y), 255)
        image.save(path.join(self.output_dir, filepath.split("/")[-1]))
        print(filepath, "处理完成")

它的速度太慢了

二、

    def main(self, filepath):
        image = Image.open(filepath)
        image = image.convert("L")
        image = image.point(lambda x: x > 150 and 255)
        image = image.filter(ImageFilter.MinFilter)

        image.save(path.join(self.output_dir, filepath.split("/")[-1]))
        print(filepath, "处理完成")

这两种方法都有一个毛病,就是阈值的问题,在试卷的左上角是偏亮的,右下角是偏暗的,导致设置阈值不太方便,想过一些方法,但碍于不熟悉pillow库,不知道怎么实现,求 求有没有大 佬分享一下想法
原图:

img

  • 写回答

3条回答 默认 最新

  • 专家-皆知 2024-03-27 20:25
    关注

    引自免费微信小程序:皆我百晓生

    首先,我们需要处理图片的背景色,使其变成黑色。在Pillow库中,我们可以使用Image.putalpha()方法将图片的透明度设置为0,这样就可以将背景色设置为黑色。

    对于点处理的方法,我们可以通过putpixel()方法将每个像素的像素值设置为0或255,0表示黑色,255表示白色。对于这种方法,我们需要确保在处理每个像素时,都将其设置为黑色。

    对于第二种方法,我们可以使用Image.convert()方法将图片的格式转换为灰度图,然后使用point()方法将亮度大于150的像素设置为255,其他像素设置为0。最后使用filter()方法将图片的亮度降低,使其偏暗。

    这两种方法都可以实现将图片处理成黑字白底的效果,只是实现方式不同。你可以根据自己的需求选择使用哪种方法。

    对于阈值的问题,你可以通过putpixel()方法将图片的像素值设置为0或255来实现。如果像素值大于150,就将其设置为255,否则就设置为0。这样就可以实现阈值处理的效果。

    希望这些信息对你有所帮助。如果你有其他问题,欢迎继续提问。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月27日

悬赏问题

  • ¥15 关于#c++#的问题:义父大人求解答
  • ¥15 VESTA绘图原子颜色显示异常
  • ¥15 天翼云搭建多ip l2tp
  • ¥30 matlab求解刃位错方程
  • ¥15 python实现CAD识图
  • ¥15 如何实现在renpy中创建并应用不同大小尺寸对话框?
  • ¥15 table表格有一列是固定列 滑动到最下面时 固定的那一列有几行没显示出来
  • ¥20 单细胞数据注释时报错
  • ¥15 vscode编译ros找不到头文件,cmake.list文件出问题,如何解决?(语言-c++|操作系统-linux)
  • ¥15 通过AT指令控制esp8266发送信息