python opencv 从Intel Realsense D435 视频流中读取并显示帧,按下空格将图像保存到指定文件夹,按下回车自动以一定时间间隔保存图像至指定文件夹
生活随笔
收集整理的這篇文章主要介紹了
python opencv 从Intel Realsense D435 视频流中读取并显示帧,按下空格将图像保存到指定文件夹,按下回车自动以一定时间间隔保存图像至指定文件夹
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
參考文章1:opencv之讀入一幅圖像,顯示圖像以及如何保存一副圖像,基礎(chǔ)操作
參考文章2:python—OpenCV2中 cv2.VideoCapture(),read(),waitKey()的使用
參考文章3:asicll常用對(duì)照表
參考文章4:python opencv按照一定間隔保存視頻幀
# -*- encoding: utf-8 -*- """ @File : save_image.py @Time : 2019/10/23 14:44 @Author : Dontla @Email : sxana@qq.com @Software: PyCharm """ import pyrealsense2 as rs import numpy as np import cv2 import os import time# Configure depth and color streams pipeline = rs.pipeline() # 創(chuàng)建 config 對(duì)象: config = rs.config() # config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30) config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)# Start streaming pipeline.start(config)try:while True:# Wait for a coherent pair of frames(一對(duì)連貫的幀): depth and colorframes = pipeline.wait_for_frames()# depth_frame = frames.get_depth_frame()color_frame = frames.get_color_frame()if not color_frame:continuecolor_image = np.asanyarray(color_frame.get_data())# Show imagescv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)cv2.imshow('RealSense', color_image)c = cv2.waitKey(1)# 手動(dòng)采集(空格鍵)# 敲擊空格將圖像保存(空格的ascii碼是32)if c == 32:# 計(jì)算文件夾里jpg文件數(shù)量,以便于關(guān)閉軟件后重新打開采集不會(huì)將已有圖片覆蓋count = 0for filename in os.listdir('../imgs/'):if filename.endswith('.jpg'):count += 1# print(count)# 保存圖像,保存到上一層的imgs文件夾內(nèi),以1、2、3、4...為文件名保存圖像cv2.imwrite('../imgs/{}.jpg'.format(count + 1), color_image)# 自動(dòng)采集(回車鍵)# 如果按下回車鍵則自動(dòng)采集(回車鍵ascii碼是13)if c == 13:# 獲取時(shí)間以在循環(huán)中判斷是否經(jīng)過(guò)了某段時(shí)間time0 = time.time()while True:# 之前卡死是因?yàn)檫M(jìn)了這個(gè)循環(huán)出不去了了,沒法wait_for_frames同時(shí)opencv窗口也沒法waitKey刷新所以就卡死了,所以必須再把wait_for_frames和waitKey加進(jìn)來(lái)# Wait for a coherent pair of frames(一對(duì)連貫的幀): depth and colorframes = pipeline.wait_for_frames()# depth_frame = frames.get_depth_frame()color_frame = frames.get_color_frame()if not color_frame:continuecolor_image = np.asanyarray(color_frame.get_data())# Show imagescv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)cv2.imshow('RealSense', color_image)c = cv2.waitKey(1)# 計(jì)算文件夾里jpg文件數(shù)量,以便于關(guān)閉軟件后重新采集不會(huì)將已有圖片覆蓋count = 0for filename in os.listdir('../imgs/'):if filename.endswith('.jpg'):count += 1# 設(shè)置延時(shí)時(shí)間(單位:秒)time_delay = 1# 使用經(jīng)過(guò)的時(shí)間差來(lái)對(duì)操作進(jìn)行延時(shí),這樣可避免流停滯,但此方法不完全準(zhǔn)確,特別是在我們的操作耗時(shí)較長(zhǎng)的情況下,延時(shí)誤差較大。當(dāng)我們將操作的時(shí)間視為無(wú)窮小時(shí),此方法準(zhǔn)確if (time.time() - time0) > time_delay:# 可以看到,實(shí)際延時(shí)微微大于我們?cè)O(shè)置的延時(shí)時(shí)間print(time.time() - time0)# 1.0003252029418945# 1.0017242431640625# 1.0030531883239746# 1.004326343536377# 1.0044221878051758# 1.008774995803833# 1.005782127380371# 1.0061774253845215# 1.010535717010498# 保存圖像,保存到上一層的imgs文件夾內(nèi),以1、2、3、4...為文件名保存圖像cv2.imwrite('../imgs/{}.jpg'.format(count + 1), color_image)# 只讓操作在某時(shí)間段內(nèi)只執(zhí)行一次,下次執(zhí)行需在延時(shí)時(shí)間time_delay(秒)后time0 += time_delay# 延時(shí)一下,不然保存太快翻車咋辦# 之前卡頓的原因是用了time.sleep函數(shù),導(dǎo)致wait_for_frames變慢了,不能用sleep函數(shù)# time.sleep(1)if c == 27:break# 如果按下ESC則關(guān)閉窗口(ESC的ascii碼為27),同時(shí)跳出循環(huán)if c == 27:cv2.destroyAllWindows()breakfinally:# Stop streamingpipeline.stop()
總結(jié)
以上是生活随笔為你收集整理的python opencv 从Intel Realsense D435 视频流中读取并显示帧,按下空格将图像保存到指定文件夹,按下回车自动以一定时间间隔保存图像至指定文件夹的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python 文件操作 os.walk(
- 下一篇: python opencv imwrit