立即学习:https://edu.csdn.net/course/play/24719/279505?utm_source=blogtoedu
目录
一、制作数据集代码
二、思路总结
1、数据集目录的准备
2、图片的获取
3、样本的录入与样本类型的切换
4、数据集存放的方法
三、API使用总结
一、制作数据集代码
import cv2
import os
"""数据集目录准备"""
dataset_path = "./dataset" # 数据集目录
# 检验数据集目录是否存在,不存在则创建目录
if not os.path.exists(dataset_path):
os.mkdir(dataset_path)
# 在数据集路径下,检测3个类的路径是否存在,不存在则创建目录
for i in range(3):
class_path = dataset_path + f"/{i}"
if not os.path.exists(class_path):
os.mkdir(class_path)
"""图片编号准备"""
data_counter = 0 # 每一类图片的计数器
class_number = 0 # 图片类型编号
"""摄像头取材准备"""
capture = cv2.VideoCapture(0)
while True:
ret, frame = capture.read() # 获取一帧
show_img = frame.copy() # show_img是原图像frame的拷贝
crop_img = frame[100:200, 100:200] # crop_img是在原图像frame上的部分截取
cv2.rectangle(show_img, (100, 100), (200, 200), (0, 0, 255), 5) # 在show_img上画出截取部分的框框
cv2.imshow('frame', show_img) # 显示图片show_img
k = cv2.waitKey(1) # OpenCV延迟1毫秒、同时检测是否有按键被按下(如果有键被按下时,将键值返回给q)
# 按下Q键退出
if k == ord('q'):
break
# 按下S键保存
elif k == ord('s'):
file_name = dataset_path + f"/{class_number}" + "/d.jpg" % data_counter # 记录保存图片的相对路径
cv2.imwrite(file_name, crop_img) # 保存图片crop_img
print(f"保存 图片{data_counter}") # 打印提示
data_counter += 1 # 计数器 + 1
# 按下N键进入下一类样本的录入
elif k == ord('n'):
class_number += 1
data_counter = 0
print(f"进入第{class_number}类样本的识别")
capture.release()
cv2.destroyAllWindows()
二、思路总结
1、数据集目录的准备
主要靠os来判断文件夹是否存在,不存在将提前创建相应文件夹
2、图片的获取
主要靠OpenCV打开摄像头,截取框选区域图片进行保存
3、样本的录入与样本类型的切换
主要靠OpenCV获取按键,判别按键信息执行对应指令
4、数据集存放的方法
在一个dataset的文件夹中,有三个文件夹【0、1、2】,分别对应三类图片数据【“我”、“好”、“帅”】,每一类图片存放在相应类型的文件夹下,各存储200张,编号均为000.jpg~199.jpg
三、API使用总结
API
作用
使用示例
os.path.exists
os判断某个文件/目录是否存在
dataset_path = "./dataset"
if not os.path.exists(dataset_path):
......
os.mkdir
os创建某个目录
os.mkdir(dataset_path)
cv2.VideoCapture
cv获取摄像头资源
capture = cv2.VideoCapture(0)
*.read
cv获取摄像头的一帧
ret, frame = capture.read()
*.copy
cv图片拷贝
show_img = frame.copy()
*[???:???, ???:???]
cv图片截取
crop_img = frame[100:200, 100:200]
cv2.rectangle
cv图片画框
cv2.rectangle(show_img, (100, 100), (200, 200), (0, 0, 255), 5)
cv2.imshow
cv图片展示
cv2.imshow('frame', show_img)
cv2.imwrite
cv图片保存
cv2.imwrite(file_name, crop_img)
cv2.waitKey
cv等待按键
k = cv2.waitKey(1)
*.release
cv释放摄像头资源
capture.release()
cv2.destroyAllWindows
关闭所有cv窗口
cv2.destroyAllWindows()
ord
返回字符对应的ASCII码值
if k == ord('q'):
break