Qt與OpenCV圖像的壓縮與傳輸

1、Qt版本: 6.2MB 壓縮成 170KB,  49倍
(1)、發送方
QImage image("/home/maya/Desktop/image/IMG00054.BMP");
QBuffer buf;
buf.open(QIODevice::ReadWrite);
image.save(&buf,"JPG");  //用於直接將 image 壓縮後 保存在 QByteArray 中

QByteArray ba = buf.data(); //發送出去
buf.close();
qDebug() << image.byteCount() << ba.size() << image.byteCount() / ba.size();

(2)、接收方
QPixmap pix;
pix.loadFromData(ba, "JPG");
pix.save("/home/maya/Desktop/image/111.jpg");

QImage img;
img.loadFromData(ba, "JPG");
img.save("/home/maya/Desktop/image/222.jpg");

2、OpenCV版本:
////////////////////////////////////////////////////////////////////
(1)、發送方
Mat mat1 = imread("/home/maya/Desktop/image/IMG00054.BMP", CV_LOAD_IMAGE_COLOR);
vector<int> param = {CV_IMWRITE_JPEG_QUALITY, 75};
vector<uchar> buf;
imencode(".jpg", mat1, buf, param);
qDebug() << buf.size();

(2)、接收方
Mat mat2 = imdecode(buf, CV_LOAD_IMAGE_COLOR);
imwrite("/home/maya/Desktop/image/jpg075.jpg", mat2, param);

QImage image("/home/maya/Desktop/image/IMG00054.BMP");
QBuffer buf;
buf.open(QIODevice::ReadWrite);
image.save(&buf,"JPG");  //用於直接將 image 壓縮後 保存在 QByteArray 中
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
(3)發送方
vector<uchar> buff;
for (QChar c : buf.data())
{
    buff.push_back(c.toLatin1());
}

(4)、接收方
vector<int> param = {CV_IMWRITE_JPEG_QUALITY, 75};
Mat mat2 = imdecode(buff, CV_LOAD_IMAGE_COLOR);
imwrite("/home/maya/Desktop/image/jpg075.jpg", mat2, param);
buf.close();
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
(5)、發送方
Mat mat1 = imread("/home/maya/Desktop/image/IMG00054.BMP", CV_LOAD_IMAGE_COLOR);
vector<int> param = {CV_IMWRITE_JPEG_QUALITY, 75};
vector<uchar> buf1;
imencode(".jpg", mat1, buf1, param);
int aa = buf1.size();
QByteArray buf11((const char*)buf1.data(), buf1.size());

(6)、發送方
QImage image("/home/maya/Desktop/image/IMG00054.BMP");
QBuffer buf2; buf2.open(QIODevice::ReadWrite);
image.save(&buf2,"jpg", 75);  //用於直接將 image 壓縮後 保存在 QByteArray 中
int bb = buf2.size();
QByteArray buf22 = buf2.data();
buf2.close();

QFile file("/home/maya/Desktop/image/b22.jpg");
file.open(QFile::WriteOnly);
file.write(buf22);
file.close();

{
QFile file("/home/maya/Desktop/image/b11.jpg");
file.open(QFile::WriteOnly);
file.write(buf11);
file.close();
}
////////////////////////////////////////////////////////////////////

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章