【计算机视觉实战 1】、anaconda下cv安装及图像基本操作、直方图、均衡化、高斯滤波

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

利用cv进行图像操作,及matplotlib包指示


一、openCV是什么?

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可用于人机互动、物体识别、图像分、人脸识别、动作识别、运动跟踪、机器人等。

安装,只需打开 anaconda promp 然后 pip install opencv

二、基本操作

1.直方图

       灰度直方图是关于灰度级分布的函数,是对图像中灰度级分布的统计。灰度直方图是将数字图像中的所有像素,按照灰度值的大小,统计其出现的频率。灰度直方图是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率。
代码如下(示例):

import cv2
import matplotlib.pyplot as plt

# 将图像转成灰度图并读取到数组中
img = cv2.imread('IMG1.JPG',cv2.IMREAD_GRAYSCALE)
width,height = img.shape[:2][::-1]
#将图片缩小便于显示观看
img_resize = cv2.resize(img,(int(width*0.1),int(height*0.1)),interpolation=cv2.INTER_CUBIC)

# 使用matplotlib的库绘制图片进行显示
# 使其标题可以显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure()  # 新建一个图像
plt.subplot(1, 2, 1)
plt.imshow(img_resize)
plt.title('原图')
plt.axis('off')  # 不显示坐标轴


# 图像直方图
plt.subplot(1, 2, 2)
plt.hist(img_resize.flatten(), 128)
plt.title('直方图')
plt.xlim([0, 250])
plt.ylim([0, 3000])

plt.show()

在这里插入图片描述

2.图像均衡化

       直方图拉伸是通过对比度拉伸对直方图进行调整,从而“扩大”前景和背景灰度的差别,以达到增强对比度的目的,这种方法可以利用线性或非线性的方法来实现直方图均衡化则通过使用累积函数对灰度值进行“调整”以实现对比度的增强。

代码如下(示例):

#对灰度图像均衡化
dst = cv2.equalizeHist(img_resize)

#对彩色图像均衡化,需要分离成三个通道,分别处理
img2_resize = cv2.resize(img2,(int(width*0.1),int(height*0.1)),interpolation=cv2.INTER_CUBIC)
(b, g, r) = cv2.split(img2_resize)
bH = cv2.equalizeHist(b)
gH = cv2.equalizeHist(g)
rH = cv2.equalizeHist(r)
# 合并每一个通道
result = cv2.merge((bH, gH, rH))

#原图及直方图
plt.figure(figsize=(30,30))  # 新建一个图像
plt.subplot(2, 4, 1)
plt.title('原图')
plt.imshow(img_resize)

plt.subplot(2, 4, 2)
plt.hist(img_resize.flatten(), 128)
plt.title('直方图')
plt.xlim([0, 250])
plt.ylim([0, 3000])

# plt.figure()  # 新建一个图像
plt.subplot(2, 4, 3)
plt.title('均衡化后')
plt.imshow(dst)

plt.subplot(2, 4, 4)
plt.hist(dst.flatten(), 128)
plt.title('直方图')
plt.xlim([0, 250])
plt.ylim([0, 3000])

plt.figure(figsize=(30,30))  # 新建一个图像
plt.subplot(2, 4, 5)
plt.title('均衡化后')
plt.imshow(result)

plt.subplot(2, 4, 6)
plt.hist(bH.flatten(), 128)
plt.title('直方图')
plt.xlim([0, 250])
plt.ylim([0, 3000])

plt.subplot(2, 4, 7)
plt.hist(gH.flatten(), 128)
plt.title('直方图')
plt.xlim([0, 250])
plt.ylim([0, 3000])

plt.subplot(2, 4, 8)
plt.hist(rH.flatten(), 128)
plt.title('直方图')
plt.xlim([0, 250])
plt.ylim([0, 3000])

在这里插入图片描述
           彩色图像
在这里插入图片描述

3.高斯滤波

       高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
代码如下(示例):

img_Guassian1 = cv2.GaussianBlur(img_resize,(5,5),1)
img_Guassian2 = cv2.GaussianBlur(img_resize,(5,5),5)

plt.figure(figsize=(10,10))  # 新建一个图像
plt.subplot(2, 2, 1)
plt.title('原图')
plt.imshow(img_resize)

plt.subplot(2, 2, 2)
plt.title('标准差1')
plt.imshow(img_Guassian1)

plt.subplot(2, 2, 3)
plt.title('标准差5')
plt.imshow(img_Guassian2)

在这里插入图片描述


总结

opencv实现了各种方法,可以对图像进行基本处理

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值