上篇文章我们学习了文本的数据采集,今天主要了解一下图片数据采集的方法。图片采集方法通常有网页采集和实时采集(传感器采集)两种。我们学习一下如何利用python 工具和笔记本计算机摄像头进行图片数据的实时采集。
1)cv2库简介
cv2 是OpenCV库的升级,它是一个跨平台的计算机视觉库,适用于实时视觉应用程序,支持Linux、Windows、Mac OS 等系统。
使用前安装:pip install opencv-python
导入:import cv2
2)图片采集相关的cv2库函数使用方法
a、打开摄像头
cv2.VideoCapture()是OpenCV库中的一个类,主要用于视频的捕获和处理。它既可以用来从摄像头捕获实时视频,也可以从视频文件中读取帧。
cv2.VideoCapture(摄像头ID) #开启摄像头,并完成摄像头的初始化操作。
使用cv2.VideoCapture(0)可以打开默认的摄像头(通常是内置摄像头)。参数0表示使用第一个摄像头设备,如果有多个摄像头,可以通过更改参数索引来选择不同的摄像头。
b、检查摄像头是否被打开
cv2. VideoCapture.isOpened()方法,检查摄像头是否初始化成功的方过方法,如果成功返回True,否在返回False。举例如下:
cap = cv2.VideoCapture(0) #开启摄像头
if cap.isOpened():
print("摄像头正常打开了!")
else:
print("摄像头打开错误!")
c、捕获每一帧图片的方法
cv2. VideoCapture.read() 方法,它是捕获帧方法,能获取视频中的每一帧图像。
如:ret_flag,img_camera = cv2. VideoCapture.read()
其中ret_flag表示是否捕获成功,返回布尔值类型;img_camera 表示返回捕获的帧信息,即图像。如果没有获取帧信息,该值为空。
d、保存图片方法
cv2.imwrite(imfilename, img_camera)
经C步骤获取到的图像以名称imfilename来保存起来,可以指定文件路径
#照片保存路径
img_dir = "D:\\dewi\\project2024\\myListPractice\\pythonProject1\\test_data\\caputure_pics\\"
filename = “001.jpg”
imfilename = img_dir + filename
cv2.imwrite(imfilename, img_camera)
e、关闭摄像头
cv2. VideoCapture.release()方法。当捕获帧或者摄像头使用结束后,需要释放该资源,即关闭摄像头。
3)举例通过笔记本摄像头获取一个图片
最基本参考代码如下:
import cv2
# 创建一个VideoCapture对象,参数0通常表示电脑的默认摄像头
cap = cv2.VideoCapture(0)
# 检查摄像头是否成功打开
if not cap.isOpened():
print("无法打开摄像头")
exit()
# 拍照,返回一个布尔值表示是否成功
ret, frame = cap.read()
img_dir = "D:\\dewi\\project2024\\myListPractice\\pythonProject1\\test_data\\caputure_pics\\"
file_name = img_dir + f"photo_001.jpg"
# 检查照片是否成功获取
if ret:
# 保存照片,文件名包含当前时间
cv2.imwrite(file_name, frame)
print(f"照片已保存为 photo_001.jpg")
else:
print("拍照失败")
# 释放VideoCapture对象
cap.release()
cv2.destroyAllWindows()#删除建立的所有窗口
4)进阶练习
假如在3)基础上,每张图片为避免名称重复需要假如时间戳。同时我们每10秒获取一帧图片,连续获取一个小时。参考如下:
import cv2 #cv2库时OpenCV 库的升级
import time
#照片保存路径
img_dir = "D:\\dewi\\project2024\\myListPractice\\pythonProject1\\test_data\\caputure_pics\\"
cap = cv2.VideoCapture(0) #开启摄像头
if cap.isOpened():
print("摄像头正常打开了!")
else:
print("摄像头打开错误!")
# 构建文件名
for i in range(360): #获取次数360次,每10秒获取一张
# 获取当前系统时间戳(秒)
current_timestamp = time.time()
# 转换为本地时间
current_time = time.localtime(current_timestamp)
# 格式化输出
formatted_time = time.strftime("%Y-%m-%d_%H%M%S", current_time)
#每张照片命名方式
#filename = f"pic_{formatted_time}.jpg"
filename = "photo_"+formatted_time + ".jpg"
img_name = img_dir + filename
ret_flag,img_camera = cap.read() #捕捉图片
cv2.imwrite(img_name,img_camera) #保存图片
print(f"保存了照片,命名为:{filename}")
time.sleep(10)
cap.release() #释放所有摄像头
cv2.destroyAllWindows() #删除建立的所有窗口
每天进步一点点,继续加油!