赞
踩
在前面我们介绍了直方图均衡可以调整图像的对比度,那么还有没有其他方式调整对比度呢?答案是肯定的,今天就来招硬核的。
这招硬核方法就是参考灰度图像的阈值处理,我们知道灰度图像的阈值处理的基本思想是:
将图像中灰度值大于等于指定阈值的,将其设置为255,小于该值的设置为0。
不过阈值处理得到的是二值图,用于进行对比度增强必须进行调整。可以改成如下:
将图像中灰度值大于等于指定阈值的,将其灰度值设置为原灰度值+x,小于该值的设置为原灰度值-x。其中x为根据对比度调整需要设置的一个固定值。
在用数码相机等拍摄白纸的情况,得到的图像并不是真正的白纸,而是带不均匀灰度的浅灰色图片,这种情况需要进行调整才能得到比较合适的背景和前景。下面以一张白纸照片粘贴文字的图片作为处理对象,该图片如下:
下面用OpenCV-Python来实现上述算法:
import numpy as np import cv2 from opencvPublic import preparePreviewImg,previewImgList,readImgFile def adjustImgContrast(): img = readImgFile(r'f:\pic\paper.jpg',True) bigmask = cv2.compare(img, np.uint8([127]), cv2.CMP_GE) smallmask = cv2.bitwise_not(bigmask) x = 90 big = cv2.add(img, x, mask=bigmask) small = cv2.subtract(img, x, mask=smallmask) res = cv2.add(big, small) preparePreviewImg('输入图像:白纸照片', img, fontSize=38, color=(255, 255, 255)) preparePreviewImg('https://blog.csdn.net/LaoYuanPython', None, fontSize=38, color=(255, 255, 255)) preparePreviewImg('调整对比度照片', res, fontSize=38, color=(255, 0, 0)) previewImgList() print('\033[31m老猿Python网址:\033[34mhttps://blog.csdn.net/LaoYuanPython\033[0m,同名微信公众号:\033[34m老猿Python')
上述实现用了compare函数,也可以直接逐个像素处理。
我们来看处理结果:
可以看到处理后的图片效果比原图片效果好了很多,当然可以继续调大x的值得到更好的效果。
以上代码中,opencvPublic是老猿常用的图像处理自定义方法的公用模块,本文使用的自定义公用模块函数preparePreviewImg,previewImgList,readImgFile,cmpMatrix,print2DMatrix,其功能请参考《https://blog.csdn.net/LaoYuanPython/article/details/111351901 OpenCV-Python图形图像处理:自用的一些工具函数功能及调用语法介绍》中的介绍。
上面的图片进行了对比度的调整,但得到的背景并不是理想的白纸,背景色的灰度也不一致。下面提供一种这种图片处理变成纯白背景的更好实现方法。
漂白背景色的代码:
import cv2 from opencvPublic import preparePreviewImg,previewImgList,readImgFile def adjustWhitePaperBG(): img = readImgFile(r'f:\pic\paper.jpg', True) kernel1 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) close = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel1) div = np.float32(img) / (close) res = np.uint8(cv2.normalize(div, div, 0, 255, cv2.NORM_MINMAX)) preparePreviewImg('输入图像:白纸照片', img, fontSize=38, color=(255, 255, 255)) preparePreviewImg('https://blog.csdn.net/LaoYuanPython', None, fontSize=38, color=(255, 255, 255)) preparePreviewImg('输出图像:白纸', res, fontSize=38, color=(255, 0, 0)) previewImgList() print('\033[31m老猿Python网址:\033[34mhttps://blog.csdn.net/LaoYuanPython\033[0m,同名微信公众号:\033[34m老猿Python') adjustWhitePaperBG()
显示的输入、输出图像:
本节介绍了一种利用阈值强制调整图像对比度的通用方法以及OpenCV-Python的实现,同时介绍了一个基于带文字的白纸照片对背景色进行漂白的案例,相关方法可以用于图像的增强。
https://stackoverflow.com/questions/10549245/how-can-i-adjust-contrast-in-opencv-in-c
更多图像处理的内容请参考专栏《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》、《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》及《图像处理基础知识》的介绍。
如对文章内容存在疑问,可在博客评论区留言,或关注:老猿Python 微信公号发消息咨询。
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。