为了长时间看电脑更舒服,我们的通常把代码编辑器、电路图、仿真波形等工具设置成深色背景。但写论文时,如果用截图的方式来插入图片,打印后会大面积的黑色,会严重影响论文的排版效果。今天介绍用python来处理这些截图,让论文看起来更舒服。
假设我们要处理的图像如下:
在这里还是要推荐下我自己建的Python开发学习群:683380553,群里都是学Python开发的,如果你正在学习Python ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2018最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴
为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])
将深色背景图像反色
扫描二维码关注公众号,回复:
5850216 查看本文章
原理就是用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
经过处理后的图像如下:
对反色后的图片二值化处理
先计算像素的灰色值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]
最终效果如下:
总结
今天介绍了python来处理图像的反色和二值化,原理简单,最终也达到的效果。完整源码下载地址:http://exasic.com/download/waveform.tar.gz