栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【跨编程语言 通信 传输图像】mmap

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【跨编程语言 通信 传输图像】mmap

目标:同一台电脑,不同编程语言传递数据 核心思路:mmap demo1:windows上C++传输1080p视频流给python(实测几乎无延迟) cpp(发视频)
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include

using namespace std;
using namespace cv;

#define MMAP_SIZE 1024*1024*50 // 1024字节
int main()
{
    //LPCWSTR是一个指向unicode编码字符串的32位指针
    LPCWSTR mmapName = L"sharemem";

    //HANDLE:句柄,是Windows用来表示对象的(不是C++的对象)
    HANDLE hMapFileVTX = CreateFileMapping(INVALID_HANDLE_VALUE,NULL, PAGE_READWRITE, 0, MMAP_SIZE, mmapName);

    //LPVOID是一个没有类型的指针,也就是说你可以将任意类型的指针赋值给LPVOID类型的变量(一般作为参数传递),
    //然后在使用的时候再转换回来。 可以将其理解为long型的指针,指向void型。
    LPVOID lpbase = MapViewOfFile(hMapFileVTX, FILE_MAP_ALL_ACCESS, 0, 0, MMAP_SIZE);

    // Do some work...
    cv::VideoCapture cap(0);
    while (cap.isOpened())
    {
        Mat src,frame;
        cap >> src;            //读取当前帧
        cv::resize(src,frame,cv::Size(1920,1080));
        if(!frame.empty()){          //判断输入的视频帧是否为空的
            imshow("C++ sender",frame);  //在window窗口显示frame摄像头数据画面
        }


        int size = frame.cols * frame.rows * frame.channels();
        cout< 
py(收视频) 
import mmap
import cv2
import numpy as np

while(1):
    mmap_file = mmap.mmap(-1, 1024 * 1024 * 50, access=mmap.ACCESS_READ, tagname='sharemem')
    all_buffer = mmap_file.read()
    data_buffer = all_buffer[:6220800]
    if(len(data_buffer)==6220800):
        cv_image = np.frombuffer(data_buffer, dtype=np.uint8).reshape(1080, 1920, 3)
        cv2.imshow('python rec',cv_image)
    else:
        print("error")
    cv2.waitKey(33)
示例画面(实测没有延迟,去掉window标题 分不出谁发谁收)

其他内容 传递int 传递double 传递str

图像案例都给了,这些可以类推了吧?什么字符串,json自己捣鼓去吧。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/587914.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号