Python中的图像处理(第八章)Python直方图统计(1)

  • 前言
  • 一. Python准备
  • 二. Python仿真
  • 三. 小结


前言

随着人工智能研究的不断兴起,Python的应用也在不断上升,由于Python语言的简洁性、易读性以及可扩展性,特别是在开源工具和深度学习方向中各种神经网络的应用,使得Python已经成为最受欢迎的程序设计语言之一。由于完全开源,加上简单易学、易读、易维护、以及其可移植性、解释性、可扩展性、可扩充性、可嵌入性:丰富的库等等,自己在学习与工作中也时常接触到Python,这个系列文章的话主要就是介绍一些在Python中常用一些例程进行仿真演示!

本系列文章主要参考杨秀章老师分享的代码资源,杨老师博客主页是Eastmount,杨老师兴趣广泛,不愧是令人膜拜的大佬,他过成了我理想中的样子,希望以后有机会可以向他请教学习交流。

因为自己是做图像语音出身的,所以结合《Python中的图像处理》,学习一下Python,OpenCV已经在Python上进行了多个版本的维护,所以相比VS,Python的环境配置相对简单,缺什么库直接安装即可。本系列文章例程都是基于Python3.8的环境下进行,所以大家在进行借鉴的时候建议最好在3.8.0版本以上进行仿真。本文继续来对本书第八章的前5个例程进行介绍。

一. Python准备

如何确定自己安装好了python

win+R输入cmd进入命令行程序

python plt直方图绘制 python做直方图_图像处理


点击“确定”

python plt直方图绘制 python做直方图_图像处理_02


输入:python,回车

python plt直方图绘制 python做直方图_图像处理_03


看到Python相关的版本信息,说明Python安装成功。

二. Python仿真

(1)新建一个chapter08_01.py文件,输入以下代码,图片也放在与.py文件同级文件夹下

# -*- coding: utf-8 -*-
# By:Eastmount CSDN 2021-02-05
import cv2  
import numpy as np
import matplotlib.pyplot as plt

#读取图像
src = cv2.imread('lena.bmp')

#绘制直方图
#plt.hist(src.ravel(), 256)
plt.hist(src.ravel(), bins=256, density=1, facecolor='green', alpha=0.75)
plt.xlabel("x")
plt.ylabel("y")
plt.show()

#显示原始图像
cv2.imshow("src", src)
cv2.waitKey(0)
cv2.destroyAllWindows()

保存.py文件

输入eixt()退出python,输入命令行进入工程文件目录

python plt直方图绘制 python做直方图_python_04


输入以下命令,跑起工程

python chapter08_01.py

python plt直方图绘制 python做直方图_opencv_05


没有报错,直接弹出图片,运行成功!

python plt直方图绘制 python做直方图_计算机视觉_06


python plt直方图绘制 python做直方图_python plt直方图绘制_07

(2)新建一个chapter08_02.py文件,输入以下代码,图片也放在与.py文件同级文件夹下

#coding:utf-8
# By:Eastmount CSDN 2021-02-05
import cv2  
import numpy as np
import matplotlib.pyplot as plt

#读取图像
src = cv2.imread('Lena.png')

#获取BGR三个通道的像素值
b, g, r = cv2.split(src)
print(r,g,b)

#绘制直方图
plt.figure("Lena")
#蓝色分量
plt.hist(b.ravel(), bins=256, density=1, facecolor='b', edgecolor='b', alpha=0.75)
#绿色分量
plt.hist(g.ravel(), bins=256, density=1, facecolor='g', edgecolor='g', alpha=0.75)
#红色分量
plt.hist(r.ravel(), bins=256, density=1, facecolor='r', edgecolor='r', alpha=0.75)
plt.xlabel("x")
plt.ylabel("y")
plt.show()

#显示原始图像
cv2.imshow("src", src)
cv2.waitKey(0)
cv2.destroyAllWindows()

保存.py文件输入以下命令,跑起工程

python chapter08_02.py

python plt直方图绘制 python做直方图_python plt直方图绘制_08

没有报错,直接输出数据,弹出图片,运行成功!

python plt直方图绘制 python做直方图_python plt直方图绘制_09


python plt直方图绘制 python做直方图_python_10

(3)新建一个chapter08_03.py文件,输入以下代码,图片也放在与.py文件同级文件夹下

#coding:utf-8
# By:Eastmount CSDN 2021-02-05
import cv2  
import numpy as np
import matplotlib.pyplot as plt
import matplotlib

#读取图像
src = cv2.imread('Lena.png')

#转换为RGB图像
img_rgb = cv2.cvtColor(src, cv2.COLOR_BGR2RGB)

#获取BGR三个通道的像素值
b, g, r = cv2.split(src)
print(r,g,b)

plt.figure(figsize=(8, 6))

#设置字体
matplotlib.rcParams['font.sans-serif']=['SimHei']

#原始图像
plt.subplot(221)
plt.imshow(img_rgb)
plt.axis('off')
plt.title("(a)原图像")

#绘制蓝色分量直方图
plt.subplot(222)
plt.hist(b.ravel(), bins=256, density=1, facecolor='b', edgecolor='b', alpha=0.75)
plt.xlabel("x")
plt.ylabel("y")
plt.title("(b)蓝色分量直方图")

#绘制绿色分量直方图
plt.subplot(223)
plt.hist(g.ravel(), bins=256, density=1, facecolor='g', edgecolor='g', alpha=0.75)
plt.xlabel("x")
plt.ylabel("y")
plt.title("(c)绿色分量直方图")

#绘制红色分量直方图
plt.subplot(224)
plt.hist(r.ravel(), bins=256, density=1, facecolor='r', edgecolor='r', alpha=0.75)
plt.xlabel("x")
plt.ylabel("y")
plt.title("(d)红色分量直方图")
plt.show()

保存.py文件输入以下命令,跑起工程

python chapter08_03.py

python plt直方图绘制 python做直方图_计算机视觉_11

没有报错,直接打印数据,弹出图片,运行成功!

python plt直方图绘制 python做直方图_python plt直方图绘制_12

(4)新建一个chapter08_04.py文件,输入以下代码,图片也放在与.py文件同级文件夹下

#encoding:utf-8
#By:Eastmount CSDN 2021-02-05
import cv2  
import numpy as np
import matplotlib.pyplot as plt
import matplotlib

#读取图像
src = cv2.imread('lena.bmp')

#计算256灰度级的图像直方图
hist = cv2.calcHist([src], [0], None, [256], [0,255])

#输出直方图大小、形状、数量
print(hist.size)
print(hist.shape)
print(hist)

#设置字体
matplotlib.rcParams['font.sans-serif']=['SimHei']

#显示原始图像和绘制的直方图
plt.subplot(121)
plt.imshow(src, 'gray')
plt.axis('off')
plt.title("(a)Lena灰度图像")

plt.subplot(122)
plt.plot(hist, color='r')
plt.xlabel("x")
plt.ylabel("y")
plt.title("(b)直方图曲线")
plt.show()

保存.py文件输入以下命令,跑起工程

python chapter08_04.py

python plt直方图绘制 python做直方图_图像处理_13


没有报错,直接打印数据,弹出图片,运行成功!

python plt直方图绘制 python做直方图_python_14

(5)新建一个chapter08_05.py文件,输入以下代码,图片也放在与.py文件同级文件夹下

#encoding:utf-8
#By:Eastmount CSDN 2021-02-05
import cv2  
import numpy as np
import matplotlib.pyplot as plt
import matplotlib

#读取图像
src = cv2.imread('Lena.png')

#转换为RGB图像
img_rgb = cv2.cvtColor(src, cv2.COLOR_BGR2RGB)

#计算直方图
histb = cv2.calcHist([src], [0], None, [256], [0,255])
histg = cv2.calcHist([src], [1], None, [256], [0,255])
histr = cv2.calcHist([src], [2], None, [256], [0,255])

#设置字体
matplotlib.rcParams['font.sans-serif']=['SimHei']

#显示原始图像和绘制的直方图
plt.subplot(121)
plt.imshow(img_rgb, 'gray')
plt.axis('off')
plt.title("(a)Lena原始图像")

plt.subplot(122)
plt.plot(histb, color='b')
plt.plot(histg, color='g')
plt.plot(histr, color='r')
plt.xlabel("x")
plt.ylabel("y")
plt.title("(b)直方图曲线")
plt.show()

保存.py文件输入以下命令,跑起工程

python chapter08_05.py

python plt直方图绘制 python做直方图_图像处理_15


没有报错,直接弹出图片,运行成功!

python plt直方图绘制 python做直方图_python_16

三. 小结

本文主要介绍在Python中调用OpenCV库对图像进行直方图统计等操作。由于本书的介绍比较系统全面,所以会出一个系列文章进行全系列仿真实现,下一篇文章将继续介绍第八章节的5例仿真实例,感兴趣的还是建议去原书第八章深入学习理解。每天学一个Python小知识,大家一起来学习进步阿!

本系列示例主要参考杨老师GitHub源码