实验1 数字图像处理Python基础
一、实验目的编程环境配置:在Python编程环境下,安装常见图像处理库(OpenCV)了解图像不同的文件存储格式;理解并掌握数字图像的基本操作;熟练掌握查看图像信息,图像灰度化的方法;熟练掌握帧差法的使用二、实验内容1.编程环境配置:在Python编程环境下,安装图像处理库(OpenCV)模块。2.在计算机的图画软件中创建一幅图像,分别存储为BMP、GIF、JPEG和TIFF格式的图像文
一、实验目的
编程环境配置:在Python编程环境下,安装常见图像处理库(OpenCV)
了解图像不同的文件存储格式;
理解并掌握数字图像的基本操作;
熟练掌握查看图像信息,图像灰度化的方法;
熟练掌握帧差法的使用
二、实验内容
car.jpg
park01.jpg
park02.jpg
- 编程环境配置:在Python编程环境下,安装图像处理库(OpenCV)模块。
- 在计算机的图画软件中创建一幅图像,分别存储为BMP、GIF、JPEG和TIFF格式的图像文件,并显示其大小。
- 实现对内容2中图像文件的读取,获取并显示图像的尺寸信息。
- 对图像car.jpg做基本操作,包括图像的读取、显示、保存、处理感兴趣区域。
(1) 图像读取和显示;
(2) 彩色图像转换为灰度图像,显示后,将其保存为car_re.jpg文件;
(3) 显示车牌感兴趣区域子图;选取车牌区域坐标(x1,y1,x2,y2)=(450,470,540,495)
(4) 在原图中用红色矩形框标记出车牌区域。 - 使用帧差法对两幅图像park01和park02进行操作,检测停车位是否被占用。
(1) 对图像进行读取,查看图像的宽、高、通道等属性信息。
(2) 将其转成灰度图,显示灰度图像。
(3) 采用最简单的图像减法(帧差法)获得差值图像,并对其进行二值化操作,判断停车位是否被占用检测。
三、完整实验程序、结果与分析
-
代码: 实现图像文件的读取;

-
对图像car.jpg做基本操作,包括图像的读取、显示、保存、处理感兴趣区域。

-
使用帧差法对两幅图像park01和park02进行操作,检测停车位是否被占用。

输出显示:
1.






四、本次作业实验结果分析及心得
实验结果分析:
通过保存BMP、GIF、JPEG、TIFF四种格式的图像发现,BMP文件体积最大(无压缩),JPEG体积最小(有损压缩),GIF和TIFF体积居中。这表明不同压缩算法对存储效率的影响显著。需要注意的是,OpenCV在读取GIF时可能仅加载第一帧,这反映了其对动态GIF支持的局限性。
在车牌提取实验中,通过手动设定坐标截取感兴趣区域(ROI),成功提取了车牌子图。但实际操作中发现,若坐标误差超过车牌边界,会导致截取失败或包含冗余背景。此外,绘制红色矩形框时需注意BGR色彩通道顺序(红色对应(0, 0, 255)),否则颜色显示异常。
对park01和park02进行灰度转换后,通过绝对差值计算和二值化处理,有效提取了两幅图像的差异区域。实验中发现,若两图光照条件不一致或存在微小抖动,差值图像会产生噪声,需通过调整阈值(如从30增至50)或形态学操作(如开闭运算)优化。最终通过统计非零像素数量判断停车位状态,验证了帧差法在静态场景中的可行性。
心得:
掌握了OpenCV的基本操作,包括图像读写、格式转换、ROI提取及图形标注。
理解了图像压缩格式的特性,如JPEG适合存储自然图像,而BMP适合保留原始数据。
实践了帧差法的核心思想,认识到其在运动检测中的简单高效,但也存在对光照敏感的局限性。
本次实验不仅巩固了理论知识,更让我体会到“调参”和“问题定位”在工程实践中的重要性。未来将深入探索图像处理与深度学习的融合应用,以解决更复杂的实际问题。
完整代码
import cv2
import os
#读取图像
image01 = cv2.imread("D:/tuxiang/park01.jpg")
shape = image01.shape
height = shape[0]
width = shape[1]
print('图像尺寸: {},高: {},宽: {},'.format(shape, height, width))
"""
4. 对图像car.jpg做基本操作,包括图像的读取、显示、保存、处理感兴趣区域。
(1) 图像读取和显示;
(2) 彩色图像转换为灰度图像,显示后,将其保存为car_re.jpg文件;
(3) 显示车牌感兴趣区域子图;选取车牌区域坐标(x1,y1,x2,y2)=(450,470,540,495)
(4) 在原图中用红色矩形框标记出车牌区域。
"""
# 读取和显示图像
img = cv2.imread("D:/tuxiang/car.jpg")
cv2.imshow('Original', img)
cv2.waitKey(0)
# 转换为灰度并保存
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('Gray', gray)
cv2.waitKey(0)
cv2.imwrite('car_re.jpg', gray)
# 提取车牌区域并显示
x1, y1, x2, y2 = 450, 470, 540, 495
roi = img[y1:y2, x1:x2]
cv2.imshow('License Plate ROI', roi)
cv2.waitKey(0)
# 在原图标记车牌区域
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 0, 255), 2)
cv2.imshow('Marked', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
"""
5. 使用帧差法对两幅图像park01和park02进行操作,检测停车位是否被占用。
(1) 对图像进行读取,查看图像的宽、高、通道等属性信息。
(2) 将其转成灰度图,显示灰度图像。
(3) 采用最简单的图像减法(帧差法)获得差值图像,并对其进行二值化操作,判断停车位是否被占用检测。
"""
# 读取图像
img1 = cv2.imread("D:/tuxiang/park01.jpg")
img2 = cv2.imread("D:/tuxiang/park02.jpg")
# 检查尺寸是否一致
if img1.shape != img2.shape:
img2 = cv2.resize(img2, (img1.shape[1], img1.shape[0]))
# 转换为灰度图
gray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
# 计算差值并二值化
diff = cv2.absdiff(gray1, gray2)
_, thresh = cv2.threshold(diff, 30, 255, cv2.THRESH_BINARY)
# 检测白色像素数量
pixel_count = cv2.countNonZero(thresh)
threshold = 1000 # 根据实际情况调整
# 判断停车位状态
if pixel_count > threshold:
print("停车位被占用")
else:
print("停车位空闲")
# 显示结果
cv2.imshow('Difference', diff)
cv2.imshow('Thresholded', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)