我想使用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,则会出现问题。
有人可以告诉我哪里出了问题吗,或者在机器上尝试我的代码,看看是否出现相同的问题?
答案 0 :(得分:0)
尝试使用其他图像格式。
在Google上进行的快速搜索发现:
根据维基百科JPG支持的最大图片大小为 65535×65535。任一尺寸的JPEG格式限制均为64k。但是 13.1之前的Photoshop实施最多只能允许30000像素 在任何一个维度上(历史原因,加上花费了一个 整理一下)
因此,最大值为255张256像素的图像。
也许imwrite
正在报告错误。您应该始终检查返回值。