今日繼續學習樹莓派4B 4G:(Raspberry Pi,簡稱RPi或RasPi)
?本人所用樹莓派4B 裝載的系統與版本如下:
?版本可用命令 (lsb_release -a) 查詢:
Opencv 版本是4.5.1:
今日對之前的測試CSI攝像頭函數進行一些理解說明,
然后就嘗試使用 imread 方法讀取照片,imwrite方法保存圖片
目錄
imread加載顯示圖像:
編寫程序:
運行程序與結果:
imread('Path',flag)函數詳解:
imwrite方法保存圖片:
編寫程序:
運行程序與結果:
網上學習網址貼出:
imread加載顯示圖像:
編寫程序:
編寫一個文件名為“Load_img.py”的python程序如下:
# coding=utf-8 import cv2 # 創建一個窗口,并允許調整窗口大小 cv2.namedWindow('image', cv2.WINDOW_NORMAL) # 讀取圖片,第二個參數0表示以灰度并以1/4大小模式讀取 img = cv2.imread('/home/pi/Pictures/Load_test.jpg', 33) # 如果圖片讀取成功,則顯示圖片 if img is not None: cv2.imshow('image', img) # 等待任意按鍵按下 key = cv2.waitKey(0) # 如果按下的是'q'鍵,則退出程序 if key & 0xFF == ord('q'): cv2.destroyAllWindows() else: print("Load_Failed...") # 無論是否按下'q'鍵,都需要在程序結束前銷毀窗口 # 但由于我們在上面的if塊中已經銷毀了窗口(如果按下'q'),這里不需要再次銷毀 # 如果上面的if塊沒有執行(即圖片未加載),則這里也不需要銷毀窗口 # 因為沒有窗口被創建
在讀取圖片代碼處需要注意文件路徑以及圖片類型名稱:
代碼中我是加載了位于/home/pi/Pictures/ 目錄下的 Load_test.jpg 圖片:
這個可以自己隨便拍張圖片放在指定目錄來測試,目錄與圖片名稱填完整正確了就可以
其次就是文件頭的這個注釋不可去除:
程序包含了一些非UTF-8編碼的字符,這是Python解釋器在讀取文件時聲明文件編碼的注釋
運行程序與結果:
使用
dos2unix
工具:程序包含了一些非UTF-8編碼的字符所以需要用工具進行一些轉換:
如果未安裝:
sudo apt-get update sudo apt-get install dos2unix
如果安裝過了:
dos2unix <文件名>.py
運行結果:
python3 Load_img.py
imread('Path',flag)函數詳解:
以下是
imread
函數中常用的枚舉flag
值及其具體意義:
- IMREAD_UNCHANGED (-1):
- 如果設置,返回加載的圖像原樣(如果有 alpha 通道,則保留;否則,會裁剪)。
- IMREAD_GRAYSCALE (0):
- 如果設置,始終將圖像轉換為灰度圖像并返回。
- IMREAD_COLOR (1):
- 如果設置,返回彩色圖像。這是默認參數,圖像的透明度會被忽略。
- IMREAD_ANYDEPTH (2):
- 如果設置,并且載入的圖像深度為 16 或 32 位,則返回對應深度的圖像;否則,轉換為 8 位圖像再返回。
- IMREAD_ANYCOLOR (4):
- 這個標志的具體作用在參考文章中未明確說明,但在某些上下文中,它可能與顏色空間的讀取方式有關。
- IMREAD_LOAD_GDAL (8):
- 如果設置,使用 GDAL 驅動程序加載圖像。GDAL 是一個用于柵格地理空間數據格式的庫。
- IMREAD_REDUCED_GRAYSCALE_2 (16):
- 如果設置,返回 1/2 大小的灰度圖像。
- IMREAD_REDUCED_COLOR_2 (17):
- 如果設置,返回 1/2 大小的彩色圖像。
- IMREAD_REDUCED_GRAYSCALE_4 (32):
- 如果設置,返回 1/4 大小的灰度圖像。
- IMREAD_REDUCED_COLOR_4 (33):
- 如果設置,返回 1/4 大小的彩色圖像。
- IMREAD_REDUCED_GRAYSCALE_8 (64):
- 如果設置,返回 1/8 大小的灰度圖像。
- IMREAD_REDUCED_COLOR_8 (65):
- 如果設置,返回 1/8 大小的彩色圖像。
- IMREAD_IGNORE_ORIENTATION (128):
- 如果設置,在讀取圖像時忽略 EXIF 中的方向信息。
imwrite方法保存圖片:
編寫程序:
這個程序可以做到打開攝像頭,實時顯示捕獲視頻流,
按下鍵盤‘C’可以截獲保存一張照片在路徑‘/home/pi/Pictures/’(注意要有這個文件夾Pictures),圖片名稱為‘your_image_0000.jpg’(0000是圖片編號;會遞增)
按下鍵盤‘Q’鍵就能退出這個程序了
# coding=utf-8 import cv2 # 打開攝像頭,0通常是默認攝像頭的索引 cap = cv2.VideoCapture(0) if not cap.isOpened(): print("Error opening video stream or file") else: frame_count = 0 # 初始化幀計數器 while True: # 讀取一幀圖像 ret, frame = cap.read() # 檢查幀是否正確讀取 if not ret: print("Can't receive frame (stream end?). Exiting ...") break # 顯示圖像 cv2.imshow('Video Stream', frame) # 等待鍵盤輸入,如果按下'q'則退出循環 key = cv2.waitKey(1) & 0xFF if key == ord('q'): break # 如果按下'c',則保存當前幀 elif key == ord('c'): # 定義保存圖片的文件路徑和名稱,包含遞增的編號 # 使用04d來確保編號是四位數,并填充前導零 file_path = f'/home/pi/Pictures/your_image_{frame_count:04d}.jpg' cv2.imwrite(file_path, frame) print(f"Image saved successfully: {file_path}") frame_count += 1 # 遞增計數器 # 釋放攝像頭 cap.release() # 關閉所有OpenCV窗口 cv2.destroyAllWindows()
運行程序與結果:
發現確實每次按下‘C’就保存一張圖片并進行了終端提示:
網上學習網址貼出:
3-3 如何通過OpenCV加載顯示圖片_嗶哩嗶哩_bilibili
3-5 如何通過OpenCV保存文件_嗶哩嗶哩_bilibili