如何将cv :: mat标头和数据部分转换为单个qbytearray?

时间:2014-06-26 13:53:02

标签: c++ qt opencv qftp

我想使用Qt 4.8.1的Qftp模块将opencv图像发送到FTP服务器。我写了以下代码:

        ftp = new QFtp(this);
        //ftp initilization
          .
          .
          .
          . 
        //
        cv::Mat InputImage(100,100,CV_8UC1,cv::Scalar::all(75));
        QImage FTP_Result = QImage((const uchar *) InputImage.data, InputImage.cols, InputImage.rows, InputImage.step, QImage::Format_Indexed8);
        QByteArray byteMe((char *) FTP_Result.bits());

        qDebug()<<"Image size is: "<<FTP_Result.height()<<"*"<<FTP_Result.width(); //it returns 100*100
        ftp->put(byteMe,"Sample.jpg");

当我进入ftp服务器硬盘时,我找到了 Sample.jpg ,并且它充满了&#34; K&#34;字符是Asci等同于&#34; 75&#34;。似乎缺少标题,因此操作系统认为它只是一个简单的文本文件。我想这是因为我只将 InputImage.data 复制到QByteArray变量中,因此没有关于该图像的信息。我该怎么做才能复制&#34; InputImage&#34;标题信息进入&#34; byteMe&#34;变量,所以我可以存储一个健康的JPEG文件?

1 个答案:

答案 0 :(得分:0)

尝试

QByteArray byteMe((char *) FTP_Result.bits(), FTP_Results.byteCount());

使用简单的char *进行构造时,它将查找以空字符结尾的字符串。