一、python及opencv的配置二、图像处理基础1.图像的直方图表示1.1概念1.2代码部分2.实现高斯滤波2.1高斯滤波的理论基础2.2代码部分3.直方图均衡化3.1原理3.2代码实现
一、python及opencv的配置在anaconda里使用activate opencv_env语句打开我自己建的虚拟环境,使用pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple语句进行opencv模块的安装。
使用conda list 语句查看已经装好的环境
图像直方图(Image Histogram)是用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素数。这种直方图中,横坐标的左侧为纯黑、较暗的区域,而右侧为较亮、纯白的区域。因此一张较暗图片的直方图中的数据多集中于左侧和中间部分,而整体明亮、只有少量阴影的图像则相反。CV 领域常借助图像直方图来实现图像的二值化。
直方图的意义如下:
● 直方图是图像中像素强度分布的图形表达方式。
● 它统计了每一个强度值所具有的像素个数。
import cv2 as cv
from matplotlib import pyplot as plt
#画出图像的直方图
def hist_image(image):
color = ("blue", "green", "red")
for i, color in enumerate(color):
hist = cv.calcHist([image], [i], None, [256], [0, 256])
plt.plot(hist, color=color)
plt.xlim([0, 256])
plt.show()
src = cv.imread("../fig.jpg")
cv.namedWindow("表情包", cv.WINDOW_NORMAL)
cv.imshow("表情包", src)
hist_image(src)
cv.waitKey(0)
cv.destroyAllWindows()
2.实现高斯滤波
2.1高斯滤波的理论基础
高斯滤波是一种线性平滑滤波器,对于服从正态分布的噪声有很好的抑制作用。在实际场景中,我们通常会假定图像包含的噪声为高斯白噪声,所以在许多实际应用的预处理部分,都会采用高斯滤波抑制噪声。
高斯滤波和均值滤波一样,都是利用一个掩膜和图像进行卷积求解。不同之处在于:均值滤波器的模板系数都是相同的,为1。而高斯滤波器的模板系数,随着距离模板中心距离的增大,系数减小(服从二维高斯分布)。所以,高斯滤波器相比于均值滤波器而言,对图像模糊程度较小,更能保持图像的整体细节。
其中
(
x
,
y
)
(x,y)
(x,y)为掩膜内任一点的坐标,
(
u
x
,
u
y
)
(ux,uy)
(ux,uy)为掩膜内中心点的坐标,在图像处理中可认为是整数;
σ
σ
σ是标准差。
高斯滤波器模板的生成最重要的参数就是高斯分布的标准差 σ σ σ。标准差代表着数据的离散程度,如果 σ σ σ较小,那么生成的模板的中心系数较大,而周围的系数较小,这样对图像的平滑效果就不是很明显;反之, σ σ σ较大,则生成的模板的各个系数相差就不是很大,比较类似均值模板,对图像的平滑效果比较明显。
由于图像的长宽可能不是滤波器大小的整数倍,因此我们需要在图像的边缘补0,这种方法叫做 zero padding。
算法流程:
①对图像进行zero padding
②根据高斯滤波器的核大小和标准差大小实现高斯滤波器
③使用高斯滤波器对图像进行滤波
④输出高斯滤波后的图像
import cv2
img=cv2.imread('../paojie.jpg')
#(3, 3)表示高斯滤波器的长和宽都为3,1.3表示滤波器的标准差
out=cv2.GaussianBlur(img,(3,3),1.3)
cv2.imwrite('out.jpg',out)
cv2.imshow('result',out)
cv2.waitKey(0)
cv2.destroyAllWindows()
3.直方图均衡化
3.1原理
直方图均衡化(Histogram equalization)就是一种常用的灰度变换方法。如果一幅图像的灰度直方图几乎覆盖了整个灰度的取值范围,并且除了个别灰度值的个数较为突出,整个灰度值分布近似于均匀分布,那么这幅图像就具有较大的灰度动态范围和较高的对比度,同时图像的细节更为丰富。已经证明,仅仅依靠输入图像的直方图信息,就可以得到一个变换函数,利用该变换函数可以将输入图像达到上述效果,该过程就是直方图均衡化。
3.2代码实现import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('img.jpg',0)
equ = cv2.equalizeHist(img)
res = np.hstack((img,equ)) #stacking images side-by-side
cv2.imshow('show',res)
cv2.waitKey()
https://segmentfault.com/a/1190000015676414
https://blog.csdn.net/schwein_van/article/details/84336633



