app与微网站的区别是什么意思,如何建立自己的公众号,新品发布会,互联网网络推广公司需求场景
现有一灰度图像#xff0c;需求是为该图像增加亮度。
原始灰度图像 预期目标图像 解决方案
不建议的方案——“”运算符
假设我们需要为原始灰度图像的亮度整体提升88#xff0c;那么利用“”运算符的源码如下#xff1a;
import cv2img_path rD:\pych…需求场景
现有一灰度图像需求是为该图像增加亮度。
原始灰度图像 预期目标图像 解决方案
不建议的方案——“”运算符
假设我们需要为原始灰度图像的亮度整体提升88那么利用“”运算符的源码如下
import cv2img_path rD:\pycharmproject\python_project\lena.jpg
img cv2.imread(img_path, 0) # 以灰度图像格式读取图像
l_value 88 # 欲增加的亮度值
img img l_value # 利用“”运算符进行亮度增强操作
cv2.imshow(lena, img)
cv2.waitKey(0)运行结果 从结果可以看出某些区域的亮度比【增强亮度前】更低
原因分析
由于cv2.imread()函数读取图像的数据格式是无符号8位整数(uint8)所以其数值范围是[0255]。当应用“”号运算符为原图增强亮度时“”的运算逻辑如下 a b { a b , a b ≤ 255 m o d ( a b , 256 ) , a b 255 (1) a b \begin{cases} ab,\quad ab\leq 255\\ mod(ab, 256), \quad ab255 \end{cases} \tag{1} ab{ab,ab≤255mod(ab,256),ab255(1) 即如果原图某个像素值a200而欲增强的亮度值为b88则“的运算结果并不是a b 288, 而是288 % 256 32(可以利用a的数据格式是uint8的信息协助理解)
建议的方案——cv2.add()方法
源码如下
import cv2img_path rD:\pycharmproject\python_project\lena.jpg
img cv2.imread(img_path, 0) # 以灰度图像格式读取图像
l_value 88 # 欲增加的亮度值
img cv2.add(img, l_value) # 利用cv2.add()方法进行亮度增强操作
cv2.imshow(lena, img)
cv2.waitKey(0)运行结果 从结果来看没有出现某些区域的亮度比【增强亮度前】更低的现象。
结果分析
当应用cv2.add()方法为原图增强亮度时其运算逻辑如下 a b { a b , a b ≤ 255 255 , a b 255 (1) a b \begin{cases} ab,\quad ab\leq 255\\ 255, \quad ab255 \end{cases} \tag{1} ab{ab,ab≤255255,ab255(1) 即如果原图某个像素值a200而欲增强的亮度值为b88则cv2.add()方法的运算结果并不是a b 288, 而是255(相加结果超过255一律取255)。
小结
经过上述分析当需要对一张图像进行亮度增强或者对两幅图像进行叠加操作时相比于“”运行符cv2.add()方法是更为安全的方案。
结束语
如果本博文对你有所帮助可以点个赞/收藏支持一下如果能够持续关注小编感激不尽~ 小编会坚持创作持续优化博文质量以小见大给读者带来更好de阅读体验~