Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.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++ 如何提取opencv Mat头文件?_C++_Opencv - Fatal编程技术网

C++ 如何提取opencv Mat头文件?

C++ 如何提取opencv Mat头文件?,c++,opencv,C++,Opencv,您好,我想将OpenCV Mat图像发送到ftp服务器,我的ftp功能的输入是uchar* 我可以使用.data方法访问Opencv图像的数据部分,但我不知道如何访问要放在.data前面的标题信息,并将整个图像作为完整图像发送。所以我需要提取OpenCV Mat结构的头信息 我还需要在标题中添加一些关于图像的信息,并将整个标题+数据更改为uchar*,以便我可以发送它。我需要这样的东西: cv::Mat Myimage(100,100,CV_8UC1,cv::Scalar::all(0)); u

您好,我想将OpenCV Mat图像发送到ftp服务器,我的ftp功能的输入是
uchar*

我可以使用.data方法访问Opencv图像的数据部分,但我不知道如何访问要放在.data前面的标题信息,并将整个图像作为完整图像发送。所以我需要提取OpenCV Mat结构的头信息

我还需要在标题中添加一些关于图像的信息,并将整个标题+数据更改为uchar*,以便我可以发送它。我需要这样的东西:

cv::Mat Myimage(100,100,CV_8UC1,cv::Scalar::all(0));
uchar * Myimagedata = Myimage.data;
uchar * Myimageheader = Header_Extractor(Myimage);
uchar * Complete_Image = Myimageheader + Myimagedata;
SEND_FTP(Complete_Image);
为什么不发送png或jpg?与当前方法相比,您应该更喜欢这种方法,原因如下:

  • 它已经有了一个内置的协议
  • 请不要通过网络发送未压缩的像素
  • 你可怜的ftp服务器会用cv::Mat做什么

向量缓冲区;
imencode(“.png”,MyImage,缓冲区);
发送FTP(&(缓冲区[0]);
嗯,等等,那需要一个发送函数,你也可以传递长度。您的SEND_FTP func可能会尝试strlen,它无法处理二进制数据。(顺便说一句,你最初的想法也有同样的问题)

此外,您还必须将ftp连接切换到二进制模式



我非常怀疑,您是否真的希望将cv::Mat序列化到ftp服务器(甚至在另一端如何保存?),但如果您希望发送cv::Mat,最好不要发送完整的Mat标头(这是一个复杂的beast),而是发送更简单的内容,如行、列、类型、数据(并确保Mat是连续的())

为此,使用您自己的简单协议会容易得多——发送一个包含行数、列数和opencv数据类型的结构,然后发送原始字节。在接收端从这个重建
Mat
会更容易。完美的答案,我在另一个项目中使用了这个imencode函数,但我忘了在这个项目中使用它。非常感谢贝拉克:)
vector<uchar> buffer;
imencode(".png", MyImage, buffer);
SEND_FTP(&(buffer[0]));