如何将cv::mat标头和数据部分转换为单个字节数组

How to convert a cv::mat header and data part into a single qbytearray?

本文关键字:转换 单个 数据部 字节数 字节 数组 cv mat      更新时间:2023-10-16

我想使用Qt 4.8.1的Qftp模块发送openv图像到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,它被"K"字符填充,这是ascii等效的"75"。似乎头丢失了,所以操作系统认为它只是一个简单的文本文件。我认为这是因为我只复制了InputImage。data保存到QByteArray变量中,因此没有关于图像的信息可用。我应该做些什么来复制"InputImage"标题信息到"byteMe"变量,这样我就可以存储一个健康的JPEG文件?

Try

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

当你用一个简单的char *构造时,它会寻找一个以空结尾的字符串