cv2在图像上的应用
起初是有图纸线条比较淡,打印的效果不理想,无疑美能达一体机的驱动完善,是可以调色深的,但总得打印出来才看到,adobe和windows带的pdf打印机是没色深设置的,就不能通过打印成pdf来实现调整。网上有说把pdf另存为图片,用office带的picture manager批量调色,再合成pdf,试了可行,用win11自带的照片来调对比度和清晰度,效果赞,而picture manager就不乐意去找了,python想当然可以做到这一点,那就动手做了。
首选了PIL导入Image和ImageEnhance,对亮度,颜色,对比度,清晰度加上参数就可以运行,简单易用,就是对参数值的选择不适应,毕竟不如照片工具现成的易用。

接下来就是测试cv2,使用imread方法,报错:
error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'
开始以为是opencv版本问题,折腾良久才发现是不支持中文路径,换成imdecode读取和imencode写入就可以了,其论是imdecode把文件路径转换成队列云云,实找不到imread为什么不能读取中文路径的原因及有效规避方法,对路径转换编码(utf-8和GB2312互转)的尝试没效。
image=cv2.imdecode(np.fromfile(file,dtype=np.uint8),cv2.IMREAD_COLOR)
cv2下两个方法都有效:
adj=cv2.convertScaleAbs(image,alpha=1,beta=1)
adj=cv2.addWeighted(image,1,image,0,0.5)
进一步网搜,发现园里superme声明原创的“OpenCV图像增强(python)”一文,颇有收获,就照着验证:
第一个例子是线性变换,方法是对像素点的灰度乘以浮点数2,值超过255白点的,就设置为255,就是通过增加像素点的灰度差来达到增加对比度,代码能运行,就是理解不了O[0>255]=255这一句,img读取出来是1*n维数组,着实理解不了这句是如何实现对255的剃头效应的,只是验证运行前后的值并未发现改变,故而注释掉了。对像素灰度处理过后,在通过转换uint8的np阵列,进而显示和保存到文件。其中的插曲是np阵列有一个resize方法,但其缩小图片失真,需用cv2的resize方法:
adj=cv2.resize(ad就,(math.ceil(image.shape[1]0.5),math.ceil(image.shape[0]0.5)))
若就此打住也可,就是效果一般,接着折腾了。需进一步锐化线条和文字,过滤扫描带来的黑点和多余的水印,思路就是回字法,如果中心的像素是黑色,则小口外大口内的像素点是需要判定的,如其内有黑色像素存在,那这个黑像素就是有效的,反之变白点,代码截图,试一试,半笑:


浙公网安备 33010602011771号