一、python及opencv的配置
在anaconda里使用activate opencv_env 语句打开我自己建的虚拟环境,使用pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple 语句进行opencv模块的安装。
使用conda list 语句查看已经装好的环境
二、图像处理基础
1.图像的直方图表示
1.1概念
图像直方图(Image Histogram)是用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素数。这种直方图中,横坐标的左侧为纯黑、较暗的区域,而右侧为较亮、纯白的区域。因此一张较暗图片的直方图中的数据多集中于左侧和中间部分,而整体明亮、只有少量阴影的图像则相反。CV 领域常借助图像直方图来实现图像的二值化。 ??直方图的意义如下: ??● 直方图是图像中像素强度分布的图形表达方式。 ??● 它统计了每一个强度值所具有的像素个数。
1.2代码部分
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 ②根据高斯滤波器的核大小和标准差大小实现高斯滤波器 ③使用高斯滤波器对图像进行滤波 ④输出高斯滤波后的图像
2.2代码部分
import cv2
img=cv2.imread('../paojie.jpg')
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))
cv2.imshow('show',res)
cv2.waitKey()
https://segmentfault.com/a/1190000015676414 https://blog.csdn.net/schwein_van/article/details/84336633
|