用python来处理待打印的深色背景图片

吃可爱长大的小学妹 提交于 2020-03-05 14:59:39

为了长时间看电脑更舒服,我们的通常把代码编辑器、电路图、仿真波形等工具设置成深色背景。但写论文时,如果用截图的方式来插入图片,打印后会大面积的黑色,会严重影响论文的排版效果。今天介绍用python来处理这些截图,让论文看起来更舒服。

假设我们要处理的图像如下:

waveform

 

为bmp类新增初始化函数

在python里,并不像C语言一样可以简单重载__init__函数。所以我们只能为__init__函数增加可变参数来实现。另一种实现方式是使用@classmethod来装饰,如下create_header_by_info(cls)。这个函数的第一个参数只能是class,返回值是class bmp的对象。

class bmp:

    def __init__(self, w=1080, h=1920):
        self.w = w
        self.h = h

    @classmethod
    def create_header_by_info(cls, tp):
        cls.tag = tp[0]
        cls.fileSize = tp[1]
        cls.rgbOffset = tp[4]
        cls.infoSize = tp[5]
        cls.pane = tp[8]
        cls.color = tp[9]
        cls.compress = tp[10]
        cls.dataSize = tp[11]
        return cls(tp[6], tp[7])

 

将深色背景图像反色

原理就是用255减去红绿蓝子像素的值,如下:

def color_inversion(self):
    for row in range(image.h):
        for col in range(image.w):
            t = self.rgbData[row][col]
            t[0] = 255 - t[0]
            t[1] = 255 - t[1]
            t[2] = 255 - t[2]
            self.rgbData[row][col] = t

经过处理后的图像如下:

waveform

 

对反色后的图片二值化处理

先计算像素的灰色值gray=red*0.3 + green*0.59 + blue*0.11,如果gray大于127就让它显示成255,否则就显示成0。

def color_binarizaiton(self):
    for row in range(image.h):
        for col in range(image.w):
            t = image.rgbData[row][col]
            gray = t[2] * 0.3 + t[1] * 0.59 + t[0] * 0.11
            if gray > 127:
                image.rgbData[row][col] = [255, 255, 255]
            else:
                image.rgbData[row][col] = [0, 0, 0]

最终效果如下:

waveform

 

总结

今天介绍了python来处理图像的反色和二值化,原理简单,最终也达到的效果。完整源码下载地址:http://exasic.com/download/waveform.tar.gz

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!