Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用C+;中的zeromq将序列化的Mat对象发送到另一台计算机+;_C++_Sockets_Opencv_Zeromq - Fatal编程技术网

C++ 使用C+;中的zeromq将序列化的Mat对象发送到另一台计算机+;

C++ 使用C+;中的zeromq将序列化的Mat对象发送到另一台计算机+;,c++,sockets,opencv,zeromq,C++,Sockets,Opencv,Zeromq,您好,我正在尝试使用zeromq和boost将mat对象发送到另一台计算机 这是我的序列化.h文件 #include <iostream> #include <fstream> #include <boost/archive/binary_oarchive.hpp> #include <boost/archive/binary_iarchive.hpp> #include <boost/serialization/split_free.hpp

您好,我正在尝试使用zeromq和boost将mat对象发送到另一台计算机

这是我的序列化.h文件

#include <iostream>
#include <fstream>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/serialization/split_free.hpp>
#include <boost/serialization/vector.hpp>

BOOST_SERIALIZATION_SPLIT_FREE(cv::Mat)
namespace boost {
    namespace serialization {

        /*** Mat ***/
        template<class Archive>
        void save(Archive & ar, const cv::Mat& m, const unsigned int version)
        {
            size_t elemSize = m.elemSize(), elemType = m.type();

            ar & m.cols;
            ar & m.rows;
            ar & elemSize;
            ar & elemType; // element type.
            size_t dataSize = m.cols * m.rows * m.elemSize();


            for (size_t dc = 0; dc < dataSize; ++dc) {
                ar & m.data[dc];
            }
        }

        template<class Archive>
        void load(Archive & ar, cv::Mat& m, const unsigned int version)
        {
            int cols, rows;
            size_t elemSize, elemType;

            ar & cols;
            ar & rows;
            ar & elemSize;
            ar & elemType;

            m.create(rows, cols, elemType);
            size_t dataSize = m.cols * m.rows * elemSize;

            //cout << "reading matrix data rows, cols, elemSize, type, datasize: (" << m.rows << "," << m.cols << "," << m.elemSize() << "," << m.type() << "," << dataSize << ")" << endl;

            for (size_t dc = 0; dc < dataSize; ++dc) {
                ar & m.data[dc];
            }
        }

    }
}
#包括
#包括
#包括
#包括
#包括
#包括
增强序列化分离自由(cv::Mat)
名称空间提升{
命名空间序列化{
/***垫子***/
模板
无效保存(存档和存档,常量cv::Mat&m,常量未签名整数版本)
{
size_t elemSize=m.elemSize(),elemType=m.type();
ar&m.cols;
应收账款和机械费;
ar&elemSize;
ar&elemType;//元素类型。
size_t dataSize=m.cols*m.rows*m.elemSize();
对于(大小\u t dc=0;dc//我没有通读你所有的代码,但这是100%错误的:

std::string serialized = save(img);
//  ...
zmq::message_t request (sizeof(serialized));
memcpy (request.data (), &serialized, sizeof(serialized));
sizeof(std::string)
与所持有字符串的大小无关,您不能从
std::string
对象中memcpy。您要做的是:

zmq::message_t request (serialized.length());
memcpy (request.data (), serialized.c_str(), serialized.length());
可能还有其他错误,但这一点很突出

std::string serialized = save(img);
//  ...
zmq::message_t request (sizeof(serialized));
memcpy (request.data (), &serialized, sizeof(serialized));
zmq::message_t request (serialized.length());
memcpy (request.data (), serialized.c_str(), serialized.length());