1. 客户端软件和程序之间的视频传输采用了cv::imencode和cv::imdecode函数实现编解码

关于CV的演示用法:
见:https://github.com/HiYx/OpenCV_Test/tree/master/demo/OpenCV_Test

此功能演示为:https://github.com/HiYx/OpenCV_Test/blob/master/demo/OpenCV_Test/test_opencv_funset.cpp

cv::imdecode函数是从指定的内存缓存中读一幅图像,而cv::imencode是将一幅图像写进内存缓存中。

发送

#include <opencv2/opencv.hpp>
#include <sys/time.h>
#include <fstream>
#include <vector>void Ros2Interface::simulation_raw_images_send(){// wait for a new frame from camera and store it into 'frame'capture.read(frame);// check if we succeededif (frame.empty()) {std::cerr << "ERROR! blank frame grabbed\n";return;}// show live and wait for a key with timeout long enough to show images//imshow("Live", frame);std::vector<unsigned char> vec_data;cv::imencode(".jpg", frame, vec_data);autopilot_msg::msg::FrameData msg1;msg1.time_stamp = get_time_ms();msg1.data = vec_data;//msg1.data.insert(msg1.data.end(), vec_data.begin(), vec_data.end());simulation_raw_images_pub_->publish(msg1);}

接收:

    void Ros2Interface::source_image_callback(const autopilot_msg::msg::FrameData::SharedPtr msg){cv::Mat frame = cv::imdecode(msg->data, CV_LOAD_IMAGE_COLOR);//cv::resize(frame, frame, cv::Size(), 0.5, 0.5);cv::imshow("source image", frame);// creat name.jpgstd::string str = std::to_string(get_time_ms())+ "_raw_df.jpg" ;//cv::imwrite(str , frame);//std::cout << "save _raw_df ok"<< str <<std::endl;cv::waitKey(1);}

使用文件IO流实现

发送

#include <opencv2/opencv.hpp>
#include <sys/time.h>
#include <fstream>
#include <vector>
#include <string>void Ros2Interface::simulation_raw_images_send(){std::string image_name = "./data/test.jpg";std::ifstream file(image_name.c_str(), std::ios::in | std::ios::binary | std::ios::ate);if (!file.is_open()) {fprintf(stderr, "open file fail: %s\n", image_name.c_str());return;}std::streampos size = file.tellg();file.seekg(0, std::ios::beg);std::string buffer(size, ' ');file.read(&buffer[0], size);file.close();std::vector<unsigned char> vec_data(&buffer[0], &buffer[0] + size);// imwrite 保存// cv::Mat mat2 = cv::imdecode(vec_data, 1);// std::string save_image2 = "2_1.jpg";// cv::imwrite(save_image2, mat2);autopilot_msg::msg::FrameData msg1;msg1.time_stamp = get_time_ms();msg1.data = vec_data;//msg1.data.insert(msg1.data.end(), vec_data.begin(), vec_data.end());simulation_raw_images_pub_->publish(msg1);}

imread/imwrite

cv::imread是从指定文件载入一幅图像,cv::imwrite是保存一幅图像到指定的文件中。

cv::imread和cv::imdecode内部都是通过ImageDecoder类来进行图像解码的。
cv::write和cv::encode内部都是通过ImageEncoder类来进行图像编码的。

【Webcam设计】客户机与程序之间的通信cv::imencode/imdecode与 std::ifstream file与imread/imwrite方式相关推荐

  1. 01_Weblogic课程之概念篇:代理服务器,web服务器,应用程序服务器,JNDI概念,JTA概念,Java消息服务,Java验证和授权(JAAS),Java管理扩展,Web客户机,客户机应用程序

     1 什么是服务器 Weblogic中服务器分为两种,一种是受管服务器,另外一种是管理服务器. Weblogic课程(Weblogic是Oracle公司的,最开始的是BEA公司的) 一 系统管理 ...

  2. 如何在基于 Silverlight 的本地应用程序之间实现通信

    http://msdn.microsoft.com/zh-cn/library/dd833075(VS.95).aspx 在两个Silverlight应用间数据通信(包括与Flash通信) 如何在基于 ...

  3. 不同物理机与虚拟机之间的通信

    NAT模式下,实现不同物理机与虚拟机之间的通信 宿主机上虚拟机的网络配置 安装虚拟机时选择选择NTA模式 点击编辑 – 虚拟网络编辑器 – 更改设置 选择NAT设置 添加虚拟机中要映射的对应端口(这里 ...

  4. 在客户机与服务器之间实现文件共享

    使用系统: WIN10.Windows Sever2016 实现文件共享前提: 两台机器必须保证在同一网段(在使用虚拟机且处于仅主机模式)如图: 实现文件共享通常有三种方式: (1)身份验证访问 (2 ...

  5. 云产品流转 - 实现小车和微信小程序之间的通信(M2M通信)

    @[toc] 功能需求: 小程序客户端(设备1)需要向小车(设备2)发送指令,控制小车的速度和方向等.所以,也就是说两个设备之间需要通信. 尝试方法:使用自定义 Topic 设备1:订阅了一个自定义的 ...

  6. 客户机和服务器在s7通信中各有什么作用,哪些通信口可以进行 Modbus TCP 通讯,作为 Modbus 服务器的 SIMATIC S7 CPU 可以...

    以下通信端口可用于 Modbus/TCP 协议:在默认情况下,端口号 502 作为 Modbus 服务器的本地端口. 可以在 Modbus 客户机中设置需要的本地端口,通常使用从 2000 开始的端口 ...

  7. java pos机到服务器之间的通信

    我用的pos机是有线的,后台代码打开串口功能,但是后台代码在远程服务器上,pos机在前台收银机上,请问如何前台与后台如何完后才能连接

  8. 如何用Java编写一个简单的服务器和客户机

    今天我要向大家介绍的是自己编写的一个比较简单的服务器和客户机程序,注意一下哦,比较简单.好了,闲话休提,砸门直入主题. 小编先从客户机和服务器的模型开始讲解.简单来说,我们实现的这种模型呢,我们每一个 ...

  9. 如何配置VirtualBox中的客户机与宿主机之间的网络连接

    当你在 VirtualBox 虚拟机软件 中安装了各种操作系统时,你可能需要实现宿主机与虚拟机之间的相互访问. 在这篇文章中,我们将会以最简单明了的方式来说明如何配置客户机与 Linux 宿主机的网络 ...

  10. 客户机-服务器系统,什么是客户机/服务器计算

    什么是客户机/服务器计算 客户机/服务器计算定义一种体系结构,在该结构中,程序逻辑分布在客户机系统和服务器系统之间.客户机/服务器计算是20世纪80年代的各种趋势形成的结果,它使用通过LAN连接到后端 ...

最新文章

  1. 【面向对象编程】(4) 类的继承,重构父类中的方法
  2. Java编写的五子棋小游戏
  3. 将java.time.LocalDate转换为java.util.Date类型
  4. 第八届蓝桥杯省赛第二题---等差素数列
  5. 数学基础学习随笔--序言
  6. 【重要】有三AI计算机视觉培养计划组合优惠,4月份起发生重大变化
  7. 小米盒子老是服务器无响应,教你解决小米盒子黑屏死机等故障解决办法!
  8. 用开源项目PhotoView实现图片的双指缩放和双击放大缩小
  9. ARM-Button-Driver-硬件图
  10. 牛客OI周赛15-普及组
  11. bzoj 2756奇怪的游戏
  12. 一路走来一路歌—我和团队有个约会
  13. 最大流模板(Edmonds-Karp)
  14. 入门:Mac终端常用知识
  15. 今天写了个查看 ABAP 类层级的程序
  16. 使用原配的SSD安装和引导DSM5.2 5644 基于zmouse和Formater教程
  17. 启动Activity时显示空白界面的问题
  18. CHD的impala实现hive和hbase数据查询
  19. android语言、名称与资源对应关系
  20. 基于SGIP协议的短信网关接口

热门文章

  1. Java中数字朝着0.5的倍数取舍
  2. c语言程序与结构,c语言基础与顺序结构-c语言程序设计.ppt
  3. linux远程连接windows桌面背景,Centos远程Windows桌面_远程桌面
  4. Windows10关闭占用某一端口号的进程
  5. Flutter实战之Image和FadeInImage
  6. 月薪30K大佬源码阅读的经验总结,干货不容错过
  7. android消息通知布局,Android Design
  8. excel 未能加载文件或程序集 officetoolbar_JavaScript数据透视表dhtmlxPivot,帮助您方便快捷的汇总大型数据集...
  9. 帆软决策报表JS实现点击超链切换TAB页
  10. 日期截取年月_2019年7月18日 期权交易日志——用小黄人教你理解期权平价公式...