目录

  • 一、Python+OpenCV配置
  • 二、基本图像处理
  • 2.1 直方图
  • 基本原理:
  • 代码实现:
  • 运行结果:
  • 2.2 高斯滤波
  • 基本原理:
  • 代码实现:
  • 运行结果:
  • 2.3 直方图均衡化
  • 基本原理:
  • 代码实现:
  • 运行结果:


一、Python+OpenCV配置

在opencv包网站下载 .whl 文件,可以去国外网站下载但是下载速度较慢,或者去国内清华镜像源下,网址分别如下:
1.国外网址
2.清华镜像源

先查到自己的python版本(3.7.4),然后在网址中找到

opencv安装教程 anaconda opencv安装教程python3.7_直方图


cp37意思是python3.7版本,然后第一个是macos系统,第二、三个是linux系统,第四、五个是win系统分别对应32位,64位下载后,把 .whl 文件复制,粘贴到anaconda中的site-packages文件夹中,如下图所示。实在找不到安装的位置,可以下载一个everything搜索软件,直接搜索文件夹就可以了。

opencv安装教程 anaconda opencv安装教程python3.7_直方图_02


然后粘贴后,在这个文件夹中,按住shift单击右键打开cmd或者powershell窗口,powershell窗口是cmd窗口升级版.

pip install xxx.whl

xxx是下载的文件名字,我的是opencv_contrib_python-3.4.10.35-cp37-cp37m-win_amd64,也就是输入

pip install opencv_contrib_python-3.4.10.35-cp37-cp37m-win_amd64.whl

验证是否成功

按win+r键后输入cmd,再输入

python
import cv2
cv2.version

左右分别为两个下划线,出现版本则安装成功。如下图:

opencv安装教程 anaconda opencv安装教程python3.7_opencv_03

二、基本图像处理

2.1 直方图

基本原理:

直方图显示图像数据时,会以左暗右明的分布曲线呈现出来,并且可以通过算法来对图像按比例进行缩小,且具有图像平移、旋转、缩放不变性等众多优点。直方图是反映一个图像像素分布的统计表:横坐标代表图像像素的种类,纵坐标代表了每一种颜色致在图像中的像素总数后哦中所占所有像素个数的百分比。

由于直方图在进行图像计算处理时的代价比较小,所以经常用于图像处理。

代码实现:

from numpy import array
 
from PIL import Image
from matplotlib.pyplot import *
from pylab import *
import matplotlib.pyplot as plt
 
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
 
im = array(Image.open('image1.jpg').convert('L'))  # 打开图像,并转成灰度图像
print(im)
figure()
subplot(121)
gray()
contour(im, origin='image')  #画图
axis('equal')  # 自动调整比例
axis('off')  # 去除x、y轴上的刻度
title(u'图像轮廓')
 
subplot(122)
hist(im.flatten(), 128)
print(im.flatten())
title(u'图像直方图')
plt.xlim([0,260])
plt.ylim([0,11000])
 
show()

运行结果:

原图:

opencv安装教程 anaconda opencv安装教程python3.7_opencv安装教程 anaconda_04


直方图:

opencv安装教程 anaconda opencv安装教程python3.7_学习_05

2.2 高斯滤波

基本原理:

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。噪声在图像当中常表现为一引起较强视觉效果的孤立像素点或像素块。简单来说,噪声的出现会给图像带来干扰,让图像变得不清楚。高斯噪声就是它的概率密度函数服从高斯分布(即正态分布)的一类噪声。高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。

代码实现:

import cv2
import matplotlib.pyplot as plt
 
im=cv2.imread("image1.jpg")
# 高斯滤波
img_Guassian = cv2.GaussianBlur(im,(5,5),0)
 
plt.subplot(121)
plt.imshow(im)
plt.subplot(122)
plt.imshow(img_Guassian)
 
plt.show()

运行结果:

opencv安装教程 anaconda opencv安装教程python3.7_学习_06

2.3 直方图均衡化

基本原理:

直方图均衡化是一种增强图像对比度的方法,其主要思想是将一副图像的直方图分布变成近似均匀分布,从而增强图像的对比度。直方图均衡化虽然只是数字图像处理)里面的基本方法,但是其作用很强大,是一种很经典的算法。使用了直方图均衡化过后的图片会变得更加清晰,特征更加地明显。

代码实现:

# -*- coding: utf-8 -*-
from PIL import Image
from matplotlib.pyplot import figure, subplot, axis, gray, title, imshow, hist
from numpy.core._multiarray_umath import array
from pylab import *
from PCV.tools import imtools
import matplotlib.pyplot as plt
 
 
# 添加中文字体支持
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14)
 
 # 打开图像,并转成灰度图像
im = array(Image.open('image1.jpg').convert('L'))
im2, cdf = imtools.histeq(im)
 
figure()
subplot(2, 2, 1)
axis('off')
gray()
title(u'原始图像', fontproperties=font)
imshow(im)
 
subplot(2, 2, 2)
axis('off')
title(u'直方图均衡化后的图像', fontproperties=font)
imshow(im2)
 
subplot(2, 2, 3)
axis('off')
title(u'原始直方图', fontproperties=font)
hist(im.flatten(), 128, density=True)
 
subplot(2, 2, 4)
axis('off')
title(u'均衡化后的直方图', fontproperties=font)
hist(im2.flatten(), 128, density=True)
plt.show()

运行结果:

opencv安装教程 anaconda opencv安装教程python3.7_计算机视觉_07