为了长时间看电脑更舒服,我们的通常把代码编辑器、电路图、仿真波形等工具设置成深色背景。但写论文时,如果用截图的方式来插入图片,打印后会大面积的黑色,会严重影响论文的排版效果。今天介绍用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])
将深色背景图像反色
原理就是用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
来源:CSDN
作者:ExASIC
链接:https://blog.csdn.net/u013233381/article/details/89145382