立即學習:https://edu.csdn.net/course/play/24719/279505?utm_source=blogtoedu
目錄
一、製作數據集代碼
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}" + "/%03d.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 |