OpenCV保存大图像与写入问题

时间:2019-04-13 08:05:24

标签: c++ opencv

我想使用OpenCV保存一个图像,该图像是300张图像大小256x256的序列(即宽度:300 * 256,高度:256)。

我尝试使用以下代码进行保存:

#include <string.h>
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <vector>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>

using namespace std;
using namespace cv;

int main(int argc, char **argv)
{
    int img_num = 300;
    cv::Mat img = cv::imread( "256.jpg", cv::IMREAD_UNCHANGED );
    if( img.empty() )
    {
        return -1;
    }
    cv::Mat img_big = cv::Mat::zeros(256,256*img_num,CV_8UC3);
    for (int i = 0; i < img_num; i++)
    {   img(cv::Rect(0,0,256,256)).copyTo(img_big(cv::Rect((i)*256,0,256,256)));        
    }
vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_JPEG_QUALITY);
compression_params.push_back(100);
    imwrite("big.jpg",img_big,compression_params);
    img_big.release();  
    img.release();  
}

并使用

进行编译
g++ -std=gnu++0x -o saveOpenCV saveOpenCV.cpp `pkg-config --libs --cflags opencv`

我希望结果将是尺寸为76800x256的图像(连续300张图像,尺寸为256x256),但输出图像仅为4.1kb,无法打开。将图像编号更改为200或250时,结果正常。我观察到,如果图像数大于250,则会出现问题。

有人可以告诉我哪里出了问题吗,或者在机器上尝试我的代码,看看是否出现相同的问题?

1 个答案:

答案 0 :(得分:0)

尝试使用其他图像格式。

在Google上进行的快速搜索发现:

  

根据维基百科JPG支持的最大图片大小为   65535×65535。任一尺寸的JPEG格式限制均为64k。但是   13.1之前的Photoshop实施最多只能允许30000像素   在任何一个维度上(历史原因,加上花费了一个   整理一下)

因此,最大值为255张256像素的图像。

也许imwrite正在报告错误。您应该始终检查返回值。