华为AI认证_图像处理实验(图像预处理)
实验一:灰度变化
代码:
import cv2
import numpy as npdef liner_trans(org,k,b=0):"""灰度变化:param img::param k: k>1时 实现灰度数值的拉伸,0<k<1 时 实现灰度数值的压缩,k=-1 b=255 实现灰度数值的反转:param b:灰度值:return:"""# 计算灰度的线性变化映射表translist=[(np.float32(x)*k+b) for x in range(256)]print("映射表",translist)# 需要转化为np.arraytransTable=np.array(translist)# 将查出[0,255]的灰度值进行调整,并指定数据类型为uint8transTable[transTable > 255] = 255transTable[transTable < 0] = 0transTable = np.round(transTable).astype(np.uint8)# 使用openCV的look up table 修改图片的灰度值return cv2.LUT(org,transTable)if __name__ == '__main__':im=cv2.imread('data/mok.png')cv2.imshow('org',im)# 反转# img=liner_trans(im,-1,255)# cv2.imshow("invsion",img)# 灰度拉伸# img = liner_trans(im, 1.2)# cv2.imshow("graystretch", img)# 灰度压缩img = liner_trans(im, 0.8)cv2.imshow("graycompress", img)cv2.waitKey()cv2.destroyAllWindows()
运行:
1.1 灰度反转
# 反转 img=liner_trans(im,-1,255) cv2.imshow("invsion",img)
1.2 灰度拉伸
# 灰度拉伸 img = liner_trans(im, 1.2) cv2.imshow("graystretch", img)
1.3 灰度压缩
# 灰度压缩 img = liner_trans(im, 0.8) cv2.imshow("graycompress", img)
1.4 gamma矫正
代码:
def gamma_tarns(img,gamma):"""伽马矫正:param img::param gamma: 伽马值:return:"""#先归一化到1 做伽马计算 再还原到[0,255]gammaList=[np.power(x/255.0,gamma)*255.0 for x in range(256)]#将数据转换为np.array 并且指定数据类型为uint8gammaTable=np.round(np.array(gammaList).astype(np.uint8))print(gammaTable)# 使用openCV 的look up table函数修改图像的灰度值return cv2.LUT(img,gammaTable)
1.4.1 使用伽马值为0.5的变化 实现对暗部的压缩 亮部的拉伸
1.4.2 使用伽马值为2的变化 实现对亮部的压缩 暗部的拉伸
实验二:直方图
2.1 直方图的显示
代码:
import cv2
import matplotlib.pyplot as plt
#读取并显示图像im=cv2.imread('data/1.png',0)
cv2.imshow("org",im)#绘制灰度图像的直方图
plt.hist(im.ravel(),256,[0,256])
plt.show()cv2.waitKey()
cv2.destroyAllWindows()
运行:
原图灰度图 灰度图直方图
2.2 直方图均衡化
代码:
import cv2
import matplotlib.pyplot as plt
#读取并显示图像im=cv2.imread('data/1.png',0)
cv2.imshow("org",im)#绘制灰度图像的直方图
# plt.hist(im.ravel(),256,[0,256])
# plt.show()# 调用OpenCV的直方图均衡化API
im_equl=cv2.equalizeHist(im)
cv2.imshow('equal',im_equl)# 显示原图像的直方图
plt.subplot(2,1,1)
plt.hist(im.ravel(),256,[0,256],label="org")
plt.legend()# 显示均衡化图像的直方图
plt.subplot(2,1,2)
plt.hist(im_equl.ravel(),256,[0,256],label="equalize")
plt.legend()plt.show()cv2.waitKey()
cv2.destroyAllWindows()
运行:
原图灰度图 原图像的直方图
2.3 彩色直方图
代码
import cv2
import numpy as np
import matplotlib.pyplot as pltdef imageHist(img,type):'''彩色直方图:param img: 通道数据:param type: 用于判断传入的是那个通道:return:'''# 判断传递进来的是那个通道if type == 31: # 传入蓝色通道color = (255,0,0)winName = 'B Hist'elif type == 32: # 绿色通道color = (0, 255, 0)winName = 'G Hist'else:color = (0, 0, 255)winName = 'R Hist'# 计算和绘制直方图hist = cv2.calcHist([img],[0],None,[256],(0.0,255.0)) # 计算直方图minV,maxV,minL,maxL = cv2.minMaxLoc(hist) # 获取最大值和最小值,并且获取对应的下标print(minV,maxV,minL,maxL)histImage = np.zeros([256,256,3],np.uint8) # 新建图像的模板,用于直方图的绘制for h in range(256):intenormal = int(hist[h] * 256 / maxV) # 为了避免超出取值范围cv2.line(histImage,(h,256),(h,256-intenormal),color)cv2.imshow(winName,histImage)if __name__ == '__main__':im = cv2.imread('data/1.png', 1)cv2.imshow('im',im)channels = cv2.split(im) # 分割通道# print(channels)for i in range(3):print(channels[i])imageHist(channels[i],i+31)cv2.waitKey()cv2.destroyAllWindows()
考点:分割通道 channels = cv2.split(im) # 分割通道
运行:
实验三:空间滤波
比较 :均值滤波 高斯滤波 中值滤波
3.1 均值滤波
代码:
import cv2
import numpy as npdef avg(img,size):"""均值滤波:param img: 待处理的图像:param size: 滤波器尺寸:return:"""avgImg=cv2.blur(img,size)cv2.imshow("avgImg",avgImg)def gaussian(img,size):"""高斯滤波:param img: 待处理的图像:param size: 滤波器尺寸:return:"""gaussianImg=cv2.GaussianBlur(img,size,0)cv2.imshow("gaussianImg", gaussianImg)def media(img,size):"""中值滤波:param img: 待处理的图像:param size: 滤波器尺寸:return:"""mediaImg=cv2.medianBlur(img,size)cv2.imshow("mediaImg", mediaImg)def sharpen(img):"""图像锐化:param img::return:"""#定义一个锐化算子M=np.array([[0,-1,0],[-1,9,-1],[-1,-1,-1]])/4.0#进行滤波处理im_s=cv2.filter2D(img,-1,M)cv2.imshow('im_s',im_s)if __name__ == '__main__':# im=cv2.imread('data/6.png',1)# cv2.imshow('im',im)# 均值滤波# avg(im,(5,5))#高斯滤波# gaussian(im,(5,5))# 中值滤波# media(im,5)#图像锐化im=cv2.imread('data/09.png',1)cv2.imshow('im',im)sharpen(im)cv2.waitKey()cv2.destroyAllWindows()
均值滤波:
# 均值滤波 # avg(im,(5,5))
高斯滤波:
#高斯滤波 gaussian(im,(5,5))
中值滤波:
# 中值滤波 media(im,5)
图像锐化:
#图像锐化 im=cv2.imread('data/09.png',1) cv2.imshow('im',im) sharpen(im)
实验四: 图像二值化
4.1 简单二值化:
代码
import cv2def simple(img):'''简单二值化:param img::return:''''''cv2.threshold() 二值化参数:第一个 待处理的图像第二个 阈值第三个 颜色值第四个 二值化的类型THRESH_BINARY 黑白二值THRESH_BINARY_INV 黑白的反转THRESH_TRUNC 得到的图像多为像素值THRESH_TOZERO 高于阈值时设置255 低于阈值不做处理THRESH_TOZERO_INV 低于阈值时设置255 高于阈值不做处理返回值第一个是阈值第二个是图像'''ret,thread1 = cv2.threshold(img,172,255,cv2.THRESH_BINARY)ret,thread2 = cv2.threshold(img,172,255,cv2.THRESH_BINARY_INV)ret,thread3 = cv2.threshold(img,172,255,cv2.THRESH_TRUNC)ret,thread4 = cv2.threshold(img,172,0,cv2.THRESH_TOZERO)ret,thread5 = cv2.threshold(img,172,255,cv2.THRESH_TOZERO_INV)cv2.imshow("thread1",thread1)cv2.imshow("thread2",thread2)cv2.imshow("thread3",thread3)cv2.imshow("thread4",thread4)cv2.imshow("thread5",thread5)
运行:
if __name__ == '__main__':im = cv2.imread('data/lena.jpg', 0)cv2.imshow('im',im)simple(im)# auto(im)cv2.waitKey()cv2.destroyAllWindows()
4.2 自适应阈值
代码
def auto(img):ret,thread1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)'''adaptiveThreshold() 自适应阈值参数:第一个 待处理的图像第二个 像素值的上限第三个 自适应的方式ADAPTIVE_THRESH_MEAN_C 领域内的均值ADAPTIVE_THRESH_GAUSSIAN_C 领域内像素点的加权,权重为一个高斯窗口第四个 赋值的方法第五个 设定领域的大小(一个正方形领域)第六个 阈值等于均值或者加权值减去这个常数'''thread2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,5,2)thread3 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)cv2.imshow('thread1',thread1)cv2.imshow('thread2',thread2)cv2.imshow('thread3',thread3)
运行:
if __name__ == '__main__':im = cv2.imread('data/lena.jpg', 0)cv2.imshow('im',im)# simple(im)auto(im)cv2.waitKey()cv2.destroyAllWindows()
实验五: 形态学运算
5.1 腐蚀
代码:
import cv2
import numpy as npdef corrode():"""腐蚀:return:"""# 读取图像并进行二值化处理im=cv2.imread('data/7.png',cv2.IMREAD_UNCHANGED)cv2.imshow('im',im)# 设置卷积核 生成一个5*5 全部为1 的矩阵kernrl=np.ones((5,5),np.uint8)# 图像的腐蚀erosion=cv2.erode(im,kernrl)cv2.imshow('erosion',erosion)cv2.waitKey()cv2.destroyAllWindows()
if __name__ == '__main__':corrode()
运行:
5.2 膨胀
代码:
def expand():"""膨胀:return:"""# 读取图像并进行二值化处理im = cv2.imread('data/7.png', cv2.IMREAD_UNCHANGED)cv2.imshow('im', im)# 设置卷积核 生成一个5*5 全部为1 的矩阵kernrl = np.ones((5, 5), np.uint8)# 图像的膨胀dest = cv2.dilate(im,kernrl)cv2.imshow('dest', dest)cv2.waitKey()cv2.destroyAllWindows()if __name__ == '__main__':# corrode()expand()
运行
5.3 闭/开运算
代码:
def closepration():"""闭运算:return:"""# 读取图像并进行二值化处理im = cv2.imread('data/7.png', cv2.IMREAD_UNCHANGED)cv2.imshow('im', im)'''getStructuringElement() 用于构造一个特定大小和相撞的结构元素,用于形态学处理参数1:MORPH_RECT 矩形MORPH_CROSS 交叉型MORPH_ELLIPSE 椭圆型'''kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5 ))dest=cv2.morphologyEx(im,cv2.MORPH_CROSS,kernel) #morphologyEx 该函数可以方便对图像进行一系列形态学运算 cv2.MORPH_CROSS 闭运算# dest = cv2.morphologyEx(im, cv2.MORPH_OPEN, kernel) # cv2.MORPH_OPEN 开运算cv2.imshow("dest",dest)cv2.waitKey()cv2.destroyAllWindows()
运行;闭运算
华为AI认证_图像处理实验(图像预处理)相关推荐
- mybatis-plus对datetime返回去掉.0_华为AI认证-TensorFlow2.0编程基础
参考<HCIA-AI2.0培训教材><HCIA-AI2.0实验手册> 认证要求: 了解TensorFlow2.0是什么以及其特点 掌握TensorFlow2.0基础和高阶操作方 ...
- 华为AI计算机,华为发布人工智能工程师认证(HCNA-AI),推动人工智能人才生态发展...
[中国,北京,2018 年7月27日] 昨日,华为在北京举行"人工智能工程师认证(HCNA-AI)"发布会,正式发布人工智能工程师认证,该认证是华为构建人工智能人才认证体系的第一步 ...
- 图像预处理 | 【附高清经典图像处理书籍下载】
概述: 1)预处理是指处于最低抽象层次的图像上所进行的操作,这时处理的输入和输出都是亮度图像. 2)预处理并不会增加图像的信息量预处理有助于抑制与特殊的图像处理或分析任务无关的信息.因此预处理的目的是 ...
- Matlab数字图像处理 实验3、图像边缘检测的计算机实现
子曰:桃李不言,下自成蹊. 图 像 边 缘 检 测 的 计 算 机 实 现 图像边缘检测的计算机实现 图像边缘检测的计算机实现 P a r t . 0 实 验 目 的 仅 限 于 学 习 交 流 Pa ...
- 数字图像处理matlab实验对图像复原,数字图像处理实验07图像的复原处理
数字图像处理实验 一.数字图像处理实验 实验七 图像的复原处理 一.实验目的 熟悉几种在实际应用中比较重要的图像复原技术,学会用MATLAB复原函数对退化图像进行复原处理. 二.实验内容 1.用点扩散 ...
- 中南民族大学计算机图像处理实验报告,中南民族大学数字图像处理程序及图像...
数字图像处理实验课 matlab实验程序 以及图像结果 附带有命名图 仅供参考 定有错误 木有绝对正确 实验1 1-1 close all; clear; f=zeros(40,40);% f(10: ...
- 数字图像处理实验四图像频域增强
一.实验目的 (1)了解图像增强的目的及意义,加深对图像增强的感性认识,巩固所学的图像增强的理论知识和相关算法. (2)熟练掌握低通.高通.带通.同态滤波器的使用方法,明确不同性质的滤波器对图像的影响 ...
- matlab实现细胞分割,MATLAB图像处理实验——细胞图像的分割和计数
代码戳这里 1. 实验内容 本实验为使用MATLAB编写的细胞图像分割及计数系统,实现了对图像内细胞的计数,以及对每个细胞周长和面积的测量,并分别展示了分割后的每个细胞的图像. 实验步骤共分为图像预处 ...
- 图像处理边缘增强matlab,数字图像处理实验 matlab 图像增强 边缘检测 图像操作.doc...
数字图像处理实验 matlab 图像增强 边缘检测 图像操作 实验1 点运算和直方图处理 实验目的 1. 掌握利用Matlab图像工具箱显示直方图的方法 2. 掌握运用点操作进行图像处理的基本原理. ...
最新文章
- 2018-3-5 (论文—网络评论中结构化信息处理的应用于研究)笔记三(互信息,信息增益,期望交叉熵,基于词频的方法,CHI统计)
- Ubuntu root密码设置
- BZOJ 1036 [ZJOI2008]树的统计Count
- MySQL 5.7的新特性(新功能)
- 改变 input[type=range] css样式
- 为什么我不喜欢数据库三范式
- J2Pay –完整示例
- 每个努力奋斗过的人,被不公正的际遇砸了满头包的时候,都有那么一瞬间的代入感。出生就是hard模式的人,早已经历了太多的劳其筋骨饿其体肤,再多的人为考验只会摧毁人对美好的向往。...
- 对象可以创建数组吗_电脑零基础可以学习创建网站吗?
- 论坛模块_版块管理_增删改查实现上下移动
- 2020 年百度之星·程序设计大赛 - 复赛 1002 Binary Addition
- poj 1226 Substrings kmp 好题,我调试了一晚上啊!!汗
- extjs-mvc结构实践(二):基本页面
- Android studio 六大基本布局详解
- linux 部署 ibase4j,ibase4j学习
- ffmpeg php 使用教程_php的ffmpeg - CSDN博客
- 脑电时频分析II:时频分析
- 单系统 台电x80pro_台电x80 pro (ID:E3E6)安装remix OS系统教程整理
- 前端性能分析探索-天眼浏览器监控
- 原创C#Winform桌面应用中实用又美观的开关控件源码分享