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

目标:同一台电脑,不同编程语言传递数据

核心思路:mmap

demo1:windows上C++传输1080p视频流给python(实测几乎无延迟)

cpp(发视频)

#include <iostream>
#include <string>
#include <thread>
#include <chrono>
#include <Windows.h>
#include <string>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include<opencv2/imgproc.hpp>

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<<size<<endl;
        memcpy(lpBase, frame.data, size);
        cv::waitKey(33);
    }
    //close
    UnmapViewOfFile(lpBase);
    CloseHandle(hMapFileVTX);
    return 0;
}

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自己捣鼓去吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值