当前位置: 首页 > web >正文

录制mp4 rospy

ros 预览摄像头

#!/usr/bin/env python
import rospy
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
import cv2# 初始化 bridge
bridge = CvBridge()def image_callback(msg):# 将ROS图像消息转换为OpenCV图像cv_image = bridge.imgmsg_to_cv2(msg, desired_encoding='bgr8')# 显示图像cv2.imshow("Camera View", cv_image)cv2.waitKey(1)if __name__ == '__main__':rospy.init_node('camera_viewer', anonymous=True)# 订阅图像话题//rospy.Subscriber('/camera_l/color/image_raw', Image, image_callback)rospy.Subscriber('/camera_f/color/image_raw', Image, image_callback)rospy.spin()cv2.destroyAllWindows()

view2.py

#!/usr/bin/env python
import rospy
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
import cv2import imageio
import os
import sys
current_dir = os.path.dirname(os.path.abspath(__file__))
current_dir_p=os.path.dirname(current_dir)
os.chdir(current_dir)
print('current_dir',current_dir)
paths = [current_dir,current_dir_p]
paths.append(os.path.join(current_dir, 'src'))for path in paths:sys.path.insert(0, path)os.environ['PYTHONPATH'] = (os.environ.get('PYTHONPATH', '') + ':' + path).strip(':')import time
class Time_Str:def __init__(self):self.last_time = ''self.counter = 0def get_time_sec(self):now_time = time.strftime("%m%d_%H%M_%S")  # 当前时间(精确到秒)self.counter += 1if now_time != self.last_time:self.last_time = now_timeself.counter = 0return f"{now_time}_{self.counter}"def get_time_mm(self):now_time = time.strftime("%m%d_%H%M")  # 当前时间(精确到秒)self.counter += 1if now_time != self.last_time:self.last_time = now_timeself.counter = 0return f"{now_time}_{self.counter}"# 初始化 bridge
bridge = CvBridge()time_str=Time_Str()
imgs = []
fps = 30
index = 0
count = 0
strat_record = Falseos.makedirs('record',exist_ok=True)def image_callback(msg):global strat_record,count,imgs,index# 将ROS图像消息转换为OpenCV图像cv_image = bridge.imgmsg_to_cv2(msg, desired_encoding='bgr8')img = cv2.cvtColor(cv_image, cv2.COLOR_BGR2RGB)if strat_record:imgs.append(img)index += 1if index % 300 == 299 and strat_record:count += 1save_video_path = f'record/{time_str.get_time_mm()}.mp4'imageio.mimsave(save_video_path, imgs, fps=fps, macro_block_size=None)imgs = []# 显示图像cv2.imshow("Camera View", cv_image)key = cv2.waitKey(1) & 0xFFif key == ord('q'):returnelif key == ord('s'):strat_record = True print("start_record")elif key == ord('e'):strat_record = Falsesave_video_path = f'record/{time_str.get_time_mm()}.mp4'imageio.mimsave(save_video_path, imgs, fps=fps, macro_block_size=None)imgs = []print("end_record")if __name__ == '__main__':rospy.init_node('camera_viewer', anonymous=True)# 订阅图像话题# rospy.Subscriber('/camera_r/color/image_raw', Image, image_callback)rospy.Subscriber('/camera_f/color/image_raw', Image, image_callback)rospy.spin()cv2.destroyAllWindows()

http://www.xdnf.cn/news/13809.html

相关文章:

  • 数字人分身系统源码开发功能深度解析
  • 基于算力魔方与PP-OCRv5的OpenVINO智能文档识别方案
  • CSS实现元素撑满剩余空间的5种方法
  • Linux启动流程和内核管理自我总结
  • 杭州公司一面java题目和解答
  • 2025最新版使用VSCode和CMake图形化编译调试Cuda C++程序(保姆级教学)
  • IOT集群扩容实践:问题剖析与解决策略
  • Vue 3.6前瞻:响应式性能革命与Vapor模式展望
  • c#.net code httpPost请求,携带文件
  • 更进一步深入的研究ObRegisterCallBack
  • Kotlin 协程与 ViewModel 的完美结合
  • Rust 学习笔记:处理任意数量的 future
  • SQL进阶之旅 Day 28:跨库操作与ETL技术
  • 【C++】入门题目之定义Dog类
  • 三大能力升级,为老项目重构开辟新路径
  • [SPDM]SPDM 证书链验证过程详解
  • linux安装阿里DataX实现数据迁移
  • 组合边缘提取和亚像素边缘提取
  • word表格批量转excel,提取表格数据到excel
  • 企业签名分发跟应用商城分发有什么区别
  • mysql 的卸载- Windows 版
  • 人工智能100问☞第46问:AI是如何“学习”的?
  • VR百科:实景三维重建
  • Java实现国密算法
  • windows下tokenizers-cpp编译
  • FPGA基础 -- 什么是 Verilog 的模块(`module`)
  • 再现重大BUG,微软紧急撤回Win 11六月更新
  • Karate整合PlayWright方式之playWright Driver
  • Vulkan学习笔记4—图形管线基础
  • Visual Studio 里面的 Help Viewer 提示Error: “.cab未经Microsoft签名” 问题解决