????????上篇文章我們學習了文本的數據采集,今天主要了解一下圖片數據采集的方法。圖片采集方法通常有網頁采集和實時采集(傳感器采集)兩種。我們學習一下如何利用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()? #刪除建立的所有窗口
每天進步一點點,繼續加油!