基础图像处理 python+opencv
目录
一.图像基础处理操作
1.1.图像读取:
1.2.灰度变化:
1.3.图片显示:
1.4.相关代码:
二.图像直方图:
2.1.直方图相关介绍:
2.2.相关代码:
2.3.运行结果:
三.直方图均衡化:
3.1.运行结果:
3.2.相关代码:
四. 高斯滤波:
4.1.运行结果:
4.2.相关代码:
一.图像基础处理操作
本次实验使用的是Python语言的PIL(Python Image Library)库,PIL库支持图像储存、显示和处理,他能够处理几乎所有图片格式,可以完成对图像的缩放、剪裁、叠加以及向图像添加线条、图像和文字等操作。
1.1.图像读取:
from PIL import Image
img = Image.open('jmu.jpg')
Image类是PIL中的核心类,上述为对图片的读取操作;
1.2.灰度变化:
图像的颜色转换可以用convert()方法实现,需要读取图像的灰度图像,可以在.open后加入convert(‘L’);
img = Image.open('jmu.jpg').convert('L')
1.3.图片显示:
plt.imshow(img1)
原图像显示和图像灰度图显示结果:
由于 plt是直接显示三通道的图像,灰度图是单通道的,可以使用
plt.imshow(img2,plt.cm.gray)
来对灰度图显示;
1.4.相关代码:
from PIL import Image
import matplotlib.pyplot as plt
img1 = Image.open('jmu.jpg')
img2 = Image.open('jmu.jpg').convert('L')
plt.subplot(1,2,1)
plt.title('jmu initial')
plt.imshow(img1)
plt.subplot(1,2,2)
plt.title('jmu trans')
plt.imshow(img2,plt.cm.gray)
plt.show()
二.图像直方图:
2.1.直方图相关介绍:
对于一幅灰度图像,可以表示为I(x,y)。I是图像的强度大小。灰度直方图就是统计不同灰度的分布概率。比如对于一个像素bit位为8的图像,那么其灰度范围就是从0~255.灰度直方图就是统计每个灰度级拥有的像素比例。通过直方图可以直观的反映出图像的明暗程度,比如0如果概率大,就说明图像偏暗,255概率大,就说明图像偏亮。
(灰度)图像的直方图可以直接用hist()函数来绘制:
plt.hist(img3.flatten(), 128)
因为hist()只接受一维数组作为输入,绘制直方图之前,需要先对图像进行压平处理,flatten()将任意数组按照优先准则转化为一维数组;其中读取的图像应该是数组值;
2.2.相关代码:
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
img2 = Image.open('jmu.jpg').convert('L')
img3 = np.array(img2)
plt.hist(img3.flatten(), 128)
plt.show()
2.3.运行结果:
三.直方图均衡化:
直方图均衡化是将原图像通过某种变换,得到一幅灰度直方图为均匀分布的新图像的方法。
def histeq(img,nbr_bins=256):# 计算图像的直方图imhist,bins = np.histogram(img.flatten(), nbr_bins, density=True)# 累计分布函数cdf = imhist.cumsum()cdf = 255 * cdf / cdf[-1] # 归一化# 使用累积分布函数的线性插值,计算新的像素值img2 = np.interp(img.flatten(), bins[:-1], cdf)return img2.reshape(img.shape),cdf
3.1.运行结果:
对比均衡化后图像与原图像的效果:
3.2.相关代码:
img3 = np.array(img2)
img4,cdf = histeq(img3)
# plt.hist(img3.flatten(), 128)
plt.subplot(2,2,1)
plt.title('jmu initial')
plt.imshow(img3,plt.cm.gray)
plt.subplot(2,2,2)
plt.title('jmu trans')
plt.imshow(img4,plt.cm.gray)
plt.subplot(2,2,3)
plt.title('jmu trans hist')
plt.hist(img4.flatten(), 128)
plt.subplot(2,2,4)
plt.title('jmu trans hist')
plt.hist(img4.flatten(), 128)
plt.show()
四. 高斯滤波:
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于的图像处理减噪过程。 可以简单的理解为,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到
高斯滤波的具体操作是:用一个用户指定的模板(或称卷积、掩膜)去扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
python中SciPy有用来做滤波操作的scipy.ndimage.filters 模块。该模块使用快速一维分离的方式来计算卷积。
4.1.运行结果:
4.2.相关代码:
img_gray = np.array(Image.open('jmu.jpg').convert('L'))
im1 = filters.gaussian_filter(img_gray, 2)
im2 = filters.gaussian_filter(img_gray, 15)
# 模糊一幅彩色图像
img2 = np.array(Image.open('jmu.jpg'))
im3 = np.zeros(img2.shape)
im4 = np.zeros(img2.shape)
for i in range(3):im3[:, :, i] = filters.gaussian_filter(img2[:, :, i], 5)im4[:, :, i] = filters.gaussian_filter(img2[:, :, i], 15)
im3 = np.uint8(im3)
im4 = np.uint8(im4)
# 使用matplotlib的库绘制图片进行显示
# 使其标题可以显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure() # 新建一个图像
plt.subplot(2, 3, 1)
plt.imshow(img_gray, cmap='gray')
plt.title('原灰度图像')
plt.subplot(2, 3, 2)
plt.imshow(im1, cmap='gray')
plt.title('标准差 = 2')
plt.subplot(2, 3, 3)
plt.imshow(im2, cmap='gray')
plt.title('标准差 = 15')
plt.show()
基础图像处理 python+opencv相关推荐
- [图像处理] Python+OpenCV实现车牌区域识别及Sobel算子
由于最近太忙,这篇文章只给出相关代码供大家学习,过一段时间会详细的写一些列Python图像处理的文章,包括各种算法原理.图像识别.图像增强.图像分类.深度学习等.本篇文章主要调用OpenCV库(cv2 ...
- python图像识别 车牌_[图像处理] Python+OpenCV实现车牌区域识别
点击上方蓝色字体,关注我们 15 本篇文章主要调用OpenCV库(cv2)进行车牌区域识别,具体步骤包括: 1.灰度转换:将彩色图片转换为灰度图像,常见的R=G=B=像素平均值. 2.高斯平滑和中值滤 ...
- [Python从零到壹] 三十五.图像处理基础篇之OpenCV绘制各类几何图形
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- [Python图像处理] 一.图像处理基础知识及OpenCV入门函数
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- [python opencv 计算机视觉零基础到实战] 四、了解色彩空间及其详解
一.学习目标 了解什么是色彩空间 了解opencv中色彩空间的转换 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python opencv ...
- 《OpenCv视觉之眼》Python图像处理六 :Opencv图像傅里叶变换和傅里叶逆变换原理及实现
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- Python的图像处理库(OpenCV,PIL,matplotlib和scikit-image)
目前接触过的python图像处理代码涉及到多种的图像库,其中最常用的当属opencv和PIL.惭愧的是,以前只是拿来用,却一直迷惑为什么不同的代码会选择不同的图像库.这些图像库的联系和区别又是什么 ...
- Python+OpenCV图像处理(一篇全)
参考:1.网易云课堂 Python+OpenCV图像处理 - 网易云课堂 2.[在水一方xym的博客]业精于勤荒于嬉,行成于思毁于随 - CSDN博客 https://blog.csdn.net/za ...
- 《OpenCv视觉之眼》Python图像处理五 :Opencv图像去噪处理之均值滤波、方框滤波、中值滤波和高斯滤波
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
最新文章
- C++ .h(头文件) 与 .cpp(源文件) 的使用
- Microbiome:污水处理厂的微型真核肠道寄生虫:多样性、活性和去除
- 考研数学一2015年真题整理
- java 浮点数精度_Java中浮点数精度问题
- QT实现自定义3D材质
- 对比let、const、var的异同
- 现代软件工程 M1 博客要求
- c语言 函数的参数传递示例_isgreaterequal()函数以及C ++中的示例
- C/C++——getline()详解
- Django-04-路由系统
- upgrade cmake-gui version
- 网络安全学习笔记--《暗战强人:黑客攻防入门全程图解》
- win7安装电子专利CPC客户端以及专利文件的生成过程
- The Operation couldn't be completed.(LaunchServicesError error 0.) 的解决方法
- 5047. 多边形三角剖分的最低得分
- Java常见面试题(二)
- 深度学习之 自然语言处理BERT
- PTA - 数据库合集22
- 零知识证明(zero knowledge validation)
- 【2016-05-09】程序员的日常:咖啡