淮安建设机械网站制作,做棋牌网站违法吗,大牌装修公司,郫县哪里有做网站的一、学习目标
了解了均衡化的作用是什么了解灰度、YUV、彩色图片均衡化的方法是使用什么方法了解了合并通道的方法是什么了解了分离通道的方法是什么
如有错误欢迎指出~
二、了解图像均衡化
2.1 了解直方图均衡化
图像直方图均衡化主要是对图像中的少数灰度进行压缩#…一、学习目标
了解了均衡化的作用是什么了解灰度、YUV、彩色图片均衡化的方法是使用什么方法了解了合并通道的方法是什么了解了分离通道的方法是什么
如有错误欢迎指出~
二、了解图像均衡化
2.1 了解直方图均衡化
图像直方图均衡化主要是对图像中的少数灰度进行压缩扩展该值的范围以致于让这个图的对比度调高使当前图像变得更加清晰。在一张图片中若整体偏亮直方图的值应该是在偏右侧就可能会产生过渡曝光若一张图像的直方图整体偏暗就会导致直方图呈现数值整体偏左可能会造成过暗不清晰所以一张图是否看起来舒服应该在直方图中的布局显示会相对于均衡。
直方图均衡化有三种分别是灰度图像直方图、彩色图像直方图以及YUV直方图均衡化。
2.2 灰度图像均衡化
需要实现直方图均衡化需要使用equalizeHist方法。equalizeHist方法使用很简单直接传入图片进去即可。首先我们需要读取一张图片并且将改图片转换成一张灰度图片
import cv2
import numpy as npimg cv2.imread(rC:\Users\mx\Desktop\ganimg.png, 1)
gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)随后调用equalizeHist方法完整代码如下
import cv2
import numpy as npimg cv2.imread(rC:\Users\mx\Desktop\ganimg.png, 1)
gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.namedWindow(Image,cv2.WINDOW_NORMAL)
cv2.namedWindow(equalizeHist_gray_img,cv2.WINDOW_NORMAL)equalizeHist_gray_img cv2.equalizeHist(gray)
cv2.imshow(equalizeHist_gray_img, equalizeHist_gray_img)
cv2.imshow(Image, gray)cv2.waitKey (0)
cv2.destroyAllWindows()结果如下 很明显通过均衡化后感觉舒服太多了。上图左侧为均衡化图右侧为原图。
2.3 彩色图像均衡化
彩色图像均衡化也是非常简单。opencv提供了一个split方法直接传入图片可以分离通道。代码如下
b,g,r cv2.split(img)随后对每个通道进行均衡化
equalizeHist_bcv2.equalizeHist(b)
equalizeHist_gcv2.equalizeHist(g)
equalizeHist_rcv2.equalizeHist(r)这时候需要将进行均衡化后的值进行合并合并三个通道成为一张彩色图片这时需要使用merge方法。merge方法将三个通道传入其中作为参数返回的结果就是合并后的彩色图像值。代码如下
merge_imgcv2.merge((equalizeHist_b, equalizeHist_g, equalizeHist_r))最终完整的代码如下
import cv2
import numpy as npimg cv2.imread(rC:\Users\mx\Desktop\ganimg.png, 1)
cv2.namedWindow(Image,cv2.WINDOW_NORMAL)
cv2.namedWindow(merge_img,cv2.WINDOW_NORMAL)b,g,r cv2.split(img)
equalizeHist_bcv2.equalizeHist(b)
equalizeHist_gcv2.equalizeHist(g)
equalizeHist_rcv2.equalizeHist(r)merge_imgcv2.merge((equalizeHist_b, equalizeHist_g, equalizeHist_r))
cv2.imshow(merge_img, merge_img)
cv2.imshow(Image, img)cv2.waitKey (0)
cv2.destroyAllWindows()结果如下 这时候的图片看起来就不难受了是非常舒服的。
YUV均值化也是非常的简单都是通过equalizeHist方法在此不浪费阅读时间直接上代码
import cv2
import numpy as npimg cv2.imread(rC:\Users\mx\Desktop\ganimg.png, 1)
YUV_img cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)
YUV_img_c cv2.split(YUV_img)
cv2.namedWindow(Image,cv2.WINDOW_NORMAL)
cv2.namedWindow(YUV_img_merge,cv2.WINDOW_NORMAL)YUV_img_c[0] cv2.equalizeHist(YUV_img_c[0])
YUV_img_merge cv2.merge(YUV_img_c)
YUV_img_c_ cv2.cvtColor(YUV_img_merge, cv2.COLOR_YCrCb2BGR)
cv2.imshow(YUV_img_merge, YUV_img_c_)
cv2.imshow(Image, img)cv2.waitKey (0)
cv2.destroyAllWindows()结果如下
2.4 折线数据对比
我们刚刚知道了如何对图片进行明亮上的修改我们现在从折线图的角度看一下两者之间的数据是否有什么变化为了查看数据的不同我先贴上折线图的核心代码
color [blue, green]
imgs[YUV_img_c_,img]
for i, v in enumerate(imgs):hist cv2.calcHist([v], [i], None, [256], [0, 256])plt.plot(hist, colorcolor[i])
plt.show()以上是对比YUV与原图的数据折线图对比。首先我们定义一个color列表分别用于显示两个不同图片数据的线段颜色随后定义一个imgs列表用来存储两张图。之后使用一个for循环imgs内容使用calcHist随便取一个通道值查看内容值随后再使用plot对图像进行绘制。完整代码如下
import cv2
import numpy as npfrom matplotlib import pyplot as pltimg cv2.imread(rC:\Users\mx\Desktop\ganimg.png, 1)
YUV_img cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)
YUV_img_c cv2.split(YUV_img)
cv2.namedWindow(Image,cv2.WINDOW_NORMAL)
cv2.namedWindow(YUV_img_merge,cv2.WINDOW_NORMAL)YUV_img_c[0] cv2.equalizeHist(YUV_img_c[0])
YUV_img_merge cv2.merge(YUV_img_c)
YUV_img_c_ cv2.cvtColor(YUV_img_merge, cv2.COLOR_YCrCb2BGR)
cv2.imshow(YUV_img_merge, YUV_img_c_)
cv2.imshow(Image, img)color [blue, green]
imgs[YUV_img_c_,img]
for i, v in enumerate(imgs):hist cv2.calcHist([v], [i], None, [256], [0, 256])plt.plot(hist, colorcolor[i])
plt.show()cv2.waitKey (0)
cv2.destroyAllWindows()结果如下 其中蓝色是做过均衡化处理后的数据绿色是没做均衡化处理的原图。从结果上可以看出两者的均衡化之间相差是非常巨大的。 该系列首发于ebaina
三、总结
了解了均衡化的作用是增加图片对比度了解灰度、YUV、彩色图片均衡化的方法是使用equalizeHist方法了解了合并通道的方法是merge了解了分离通道的方法是split