如何提取opencv Mat头?

时间:2014-06-28 10:18:46

标签: c++ opencv

您好我想将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);

1 个答案:

答案 0 :(得分:1)

为什么不发送png或jpg encoded image?出于以下几个原因,您应该更喜欢这种方法:

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

vector<uchar> buffer;
imencode(".png", MyImage, buffer);
SEND_FTP(&(buffer[0]));
嗯,等等,这需要一个发送功能,你也可以传递长度。您的SEND_FTP函数可能会尝试strlen,这对二进制数据无效。 (与你原来的想法相同的问题,顺便说一句)

另外,您必须将ftp连接切换为二进制模式。


我非常怀疑,你真的希望将cv :: Mat序列化到ftp服务器(如何在另一端保存,甚至?),但如果 em>你想发送一个,你可能会更好,不发送完整的Mat标题(它是一个复杂的野兽),但更简单的东西,如行,列,类型,数据(并确保,你的Mat isContinous() )。