牛求艺 IT技术

人工智能AI培训_图像数据预处理实验

教培参考

教育培训行业知识型媒体

发布时间: 2025年07月18日 01:23

2025年【IT技术】报考条件/培训费用/专业咨询 >>

IT技术报考条件是什么?IT技术培训费用是多少?IT技术专业课程都有哪些?

点击咨询

人工智能AI培训_图像数据预处理实验

1.实验简介
图像预处理的主要目的是消除图像中无关的信息,恢复有用的真实信息,增强有关信息的可检测性、最大限度地简化数据,从而改进特征提取、图像分割、匹配和识别的可靠性。

本实验使用OpenCV图像处理库实现基本的图像预处理操作。包括图像的颜色空间转换、坐标变化、灰度变化、直方图变化和图像滤波。

人工智能AI培训

2.实验目的
本实验将理论教材中介绍的图像预处理技术通过Python语言的OpenCV图像处理库实现。通过本实验学员将了解如何使用OpenCV进行图像预处理。通过实际图像数据的变化,加深对图像预处理技术的感知,本实验将指导学员理解和掌握如何使用Python语言进行图像预处理开发的方法和技巧。
3.实验环境说明

本实验建议安装3.6以上版本的Python环境,并且需要安装OpenCV,numpy,matplotlib第三方库。

4.实验步骤
4.1.基本操作
注意:所有实验1.4中代码所读取的图片,学员可选用自己电脑本地的图片读取;图片路径为自己本地的实际路径。
步骤 1图像的读取和显示​

import cv2
# 读取一副图像 第一个参数是图像路径
# 第二个参数代表读取方式,1表示3通道彩色,0表示单通道灰度
im = cv2.imread(r"lena512color.tiff",1)
# 在"test"窗口中显示图像im
cv2.imshow("test",im)
# 等待用户按键反馈
cv2.waitKey()
# 销毁所有创建的窗口
cv2.destroyAllWindows()
​  步骤 2显示数据类型和图像尺寸
# 打印图像数据的数据结构类型
print(type(im))
# 打印图像的尺寸
print(im.shape)
步骤 3图像的保存
# 将图像保存到指定路径
cv2.imwrite('lena.jpg',im)
​  4.2.颜色空间转换
步骤 1彩色图像灰度化
import cv2
im = cv2.imread(r"lena.jpg")
cv2.imshow("BGR",im)
# 使用cvtColor进行颜色空间变化 cv2.COLOR_BGR2GRAY 代表BGR to gray
img_gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
cv2.imshow("Gray",img_gray)
cv2.waitKey()
cv2.destroyAllWindows()
步骤 2更换三通道顺序BGR为RGB
import cv2
im = cv2.imread(r"lena.jpg")
cv2.imshow("BGR",im)
# 使用cvtColor进行颜色空间变化 cv2.COLOR_BGR2RGB 代表BGR to RGB
im_rgb = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
# 当图像数据为3通道时,imshow函数认为数据是BGR的
# 使用imshow显示RGB数据,会发现图片显示颜色畸变
cv2.imshow("RGB",im_rgb)
cv2.waitKey()
cv2.destroyAllWindows()
步骤 3BGR和HSV颜色空间转换
import cv2
im = cv2.imread(r"lena.jpg")
cv2.imshow("BGR",im)
# 使用cvtColor进行颜色空间变化 cv2.COLOR_BGR2HSV 代表BGR to HSV
im_hsv = cv2.cvtColor(im,cv2.COLOR_BGR2HSV)
# 当图像数据为3通道时,imshow函数认为数据是BGR的
# 使用imshow显示HSV数据,会将HSV分量强行当做BGR进行显示
cv2.imshow("HSV",im_hsv)
cv2.waitKey()
cv2.destroyAllWindows()
4.3.坐标变化
步骤 1平移
import numpy as np
import cv2
# 定义平移translate函数
def translate(img,x,y):
# 获取图像尺寸
(h,w) = img.shape[:2]
# 定义平移矩阵
M = np.float32([[1,0,x],[0,1,y]])
# 使用OpenCV仿射变换函数实现平移操作
shifted = cv2.warpAffine(img,M,(w,h))
# 返回转换后的图像
return shifted
# 加载图像并显示
im = cv2.imread('lena.jpg')
cv2.imshow("Orig",im)
# 对原图做平移操作
# 下移50像素
shifted = translate(im,0,50)
cv2.imshow("Shift1",shifted)
# 左移100像素
shifted = translate(im,-100,0)
cv2.imshow("Shift2",shifted)
# 右移50,下移100像素
shifted = translate(im,50,100)
cv2.imshow("Shift3",shifted)
cv2.waitKey()
cv2.destroyAllWindows()
步骤 2旋转
import numpy as np
import cv2
# 定义旋转rotate函数
def rotate(img,angle,center=None,scale=1.0):
# 获取图像尺寸
(h,w) = img.shape[:2]
# 旋转中心的缺失值为图像中心
if center is None:
center = (w / 2,h / 2)
# 调用计算旋转矩阵函数
M = cv2.getRotationMatrix2D(center,angle,scale)
# 使用OpenCV仿射变换函数实现旋转操作
rotated = cv2.warpAffine(img,M,(w,h))
# 返回旋转后的图像
return rotated
im = cv2.imread('lena.jpg')
cv2.imshow("Orig",im)
# 对原图做旋转操作
# 逆时针45度
rotated = rotate(im,45)
cv2.imshow("Rotate1",rotated)
# 顺时针20度
rotated = rotate(im,-20)
cv2.imshow("Rotate2",rotated)
# 逆时针90度
rotated = rotate(im,90)
cv2.imshow("Rotate3",rotated)
cv2.waitKey()
cv2.destroyAllWindows()
步骤 3镜像
import numpy as np
import cv2
im = cv2.imread('lena.jpg')
cv2.imshow("orig",im)
# 进行水平镜像
im_flip0 = cv2.flip(im,0)
cv2.imshow("flip vertical ",im_flip0)
# 进行垂直镜像
im_flip1 = cv2.flip(im,1)
cv2.imshow("flip horizontal ",im_flip1)
cv2.waitKey()
cv2.destroyAllWindows()
步骤 4缩放
import numpy as np
import cv2
im = cv2.imread('lena.jpg')
cv2.imshow("orig",im)
# 获取图像尺寸
(h,w) = im.shape[:2]
# 缩放的目标尺寸
dst_size = (200,300)
# 最邻近插值
method = cv2.INTER_NEAREST
# 进行缩放
resized = cv2.resize(im,dst_size,interpolation = method)
cv2.imshow("resized1",resized)
# 缩放的目标尺寸
dst_size = (800,600)
# 双线性插值
method = cv2.INTER_LINEAR
# 进行缩放
resized = cv2.resize(im,dst_size,interpolation = method)
cv2.imshow("resized2",resized)
cv2.waitKey()
cv2.destroyAllWindows()
4.4.灰度变化
步骤 1灰度变化。反转,灰度拉伸,灰度压缩
import numpy as np
import cv2
from matplotlib import pyplot as plt
# 定义线性灰度变化函数
# k>1时 实现灰度数值的拉伸
# 0<k<1时 实现灰度数值的压缩
# k=-1 b=255 实现灰度反转
def linear_trans(img,k,b=0):
# 计算灰度线性变化的映射表
trans_list = [(np.float32(x)*k+b) for x in range(256)]
# 将列表转换为np.array
trans_table =np.array(trans_list)
# 将超过[0,255]灰度范围的数值进行调整,并指定数据类型为uint8
trans_table[trans_table>255] = 255
trans_table[trans_table<0] = 0
trans_table = np.round(trans_table).astype(np.uint8)
# 使用OpenCV的look up table函数修改图像的灰度值
return cv2.LUT(img,trans_table)
im = cv2.imread('lena.jpg',0)
cv2.imshow('org',im)
# 反转
im_inversion = linear_trans(im,-1,255)
cv2.imshow('inversion',im_inversion)
# 灰度拉伸
im_stretch = linear_trans(im,1.2)
cv2.imshow('graystretch',im_stretch)
# 灰度压缩
im_compress = linear_trans(im,0.8)
cv2.imshow('graycompress',im_compress)
cv2.waitKey()
cv2.destroyAllWindows()
步骤 2伽马变化
import numpy as np
import cv2
from matplotlib import pyplot as plt
# 定义伽马变化函数
def gamma_trans(img,gamma):
# 先归一化到1,做伽马计算,再还原到[0,255]
gamma_list = [np.power(x / 255.0,gamma) * 255.0 for x in range(256)]
# 将列表转换为np.array,并指定数据类型为uint8
gamma_table = np.round(np.array(gamma_list)).astype(np.uint8)
# 使用OpenCV的look up table函数修改图像的灰度值
return cv2.LUT(img,gamma_table)
im = cv2.imread('lena.jpg',0)
cv2.imshow('org',im)
# 使用伽马值为0.5的变化,实现对暗部的拉升,亮部的压缩
im_gama05 = gamma_trans(im,0.5)
cv2.imshow('gama0.5',im_gama05)
# 使用伽马值为2的变化,实现对亮部的拉升,暗部的压缩
im_gama2 = gamma_trans(im,2)
cv2.imshow('gama2',im_gama2)
cv2.waitKey()
cv2.destroyAllWindows()
4.5.直方图
步骤 1直方图的显示
import cv2
from matplotlib import pyplot as plt
# 读取并显示图像
im = cv2.imread("lena.jpg",0)
cv2.imshow('org',im)
# 绘制灰度图像的直方图
plt.hist(im.ravel(),256,[0,256])
plt.show()
# 等待用户按键反馈
cv2.waitKey()
cv2.destroyAllWindows()
步骤 2直方图均衡化
import cv2
from matplotlib import pyplot as plt
im = cv2.imread("lena.jpg",0)
cv2.imshow('org',im)
# 调用OpenCV的直方图均衡化API
im_equ1 = cv2.equalizeHist(im)
cv2.imshow('equal',im_equ1)
# 显示原始图像的直方图
plt.subplot(2,1,1)
plt.hist(im.ravel(),256,[0,256],label='org')
plt.legend()
# 显示均衡化图像的直方图
plt.subplot(2,1,2)
plt.hist(im_equ1.ravel(),256,[0,256],label='equalize')
plt.legend()
plt.show()
# 等待用户按键反馈后销毁窗口
cv2.waitKey()
cv2.destroyAllWindows()
4.6.滤波
步骤 1中值滤波
import cv2
import numpy as np
im = cv2.imread('lena.jpg')
cv2.imshow('org',im)
# 调用OpenCV的中值模糊API
im_medianblur = cv2.medianBlur(im,5)
cv2.imshow('median_blur',im_medianblur)
cv2.waitKey(0)
cv2.destroyAllWindows()
步骤 2均值滤波
# 方法一:直接调用OpenCV的API
import cv2
import numpy as np
im = cv2.imread('lena.jpg')
cv2.imshow('org',im)
# 调用OpenCV的均值模糊API
im_meanblur1 = cv2.blur(im,(3,3))
cv2.imshow('mean_blur_1',im_meanblur1)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 方法二:使用均值算子和filter2D 自定义滤波操作
import cv2
import numpy as np
im = cv2.imread('lena.jpg')
cv2.imshow('org',im)
# 均值算子
mean_blur = np.ones([3,3],np.float32)/9
# 使用filter2D进行滤波操作
im_meanblur2 = cv2.filter2D(im,-1,mean_blur)
cv2.imshow('mean_blur_2',im_meanblur2)
cv2.waitKey(0)
cv2.destroyAllWindows()
步骤 3高斯滤波
# 方法一:直接调用OpenCV的API
import cv2
import numpy as np
im = cv2.imread('lena.jpg')
cv2.imshow('org',im)
# 调用OpenCV的高斯模糊API
im_gaussianblur1 = cv2.GaussianBlur(im,(5,5),0)
cv2.imshow('gaussian_blur_1',im_gaussianblur1)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 方法二:使用高斯算子和filter2D 自定义滤波操作
import cv2
import numpy as np
im = cv2.imread('lena.jpg')
cv2.imshow('org',im)
# 高斯算子
gaussian_blur = np.array([
[1,4,7,4,1],
[4,16,26,16,4],
[7,26,41,26,7],
[4,16,26,16,4],
[1,4,7,4,1]],np.float32)/273
# 使用filter2D进行滤波操作
im_gaussianblur2 = cv2.filter2D(im,-1,gaussian_blur)
cv2.imshow('gaussian_blur_2',im_gaussianblur2)
cv2.waitKey(0)
cv2.destroyAllWindows()
步骤 4锐化
import cv2
import numpy as np
im = cv2.imread('lena.jpg')
cv2.imshow('org',im)
# 锐化算子
sharpen_1 = np.array([
[-1,-1,-1],
[-1,9,-1],
[-1,-1,-1]])
# 使用filter2D进行滤波操作
im_sharpen1 = cv2.filter2D(im,-1,sharpen_1)
cv2.imshow('sharpen_1',im_sharpen1)
# 锐化算子2
sharpen_2 = np.array([
[0,-1,0],
[-1,8,-1],
[0,1,0]])/4.0
# 使用filter2D进行滤波操作
im_sharpen2 = cv2.filter2D(im,-1,sharpen_2)
cv2.imshow('sharpen_2',im_sharpen2)
cv2.waitKey(0)
cv2.destroyAllWindows()
5.实验小结
本章主要介绍了应用基于Python语言的OpenCV图像处理库进行图像预处理实验的具体操作。使用OpenCV图像处理库实现了图像的颜色空间转换、坐标变化、灰度变化、直方图变化和图像滤波。加深对图像预处理技术的感知,为使用图像预处理技术提供了实际的操作指导。

温馨提示:
本文【人工智能AI培训_图像数据预处理实验】由作者教培参考提供。该文观点仅代表作者本人,牛求艺系信息发布平台,仅提供信息存储空间服务,若存在侵权问题,请及时联系管理员或作者进行删除。
我们采用的作品包括内容和图片部分来源于网络用户投稿,我们不确定投稿用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的权利,请联系我站将及时删除。
内容侵权、违法和不良信息举报
Copyright @ 2025 牛求艺 All Rights Reserved 版权所有.