OpenCV сохраняет большое изображение с проблемой imwrite - PullRequest
1 голос
/ 13 апреля 2019

Я хочу сохранить изображение, которое представляет собой последовательность из 300 изображений размером 256x256, используя OpenCV (то есть ширина: 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,1 КБ, и его нельзя открыть. При изменении номера изображения на 200 или 250, результат в порядке. Я заметил, что если номер изображения больше 250, то проблема возникла.

Кто-нибудь может сказать мне, что не так, или попробовать мой код на компьютере и посмотреть, возникает ли такая же проблема?

1 Ответ

0 голосов
/ 13 апреля 2019

Попробуйте использовать другой формат изображения.

Быстрый поиск в Google находит:

Согласно википедии JPG поддерживает максимальный размер изображения 65535 × 65535. Ограничение формата JPEG составляет 64 КБ в любом измерении. Но Реализация Photoshop до 13.1 допускается только до 30000 пикселей в любом измерении (исторические причины, плюс странные ошибки, пока выпрямиться)

Таким образом, максимум составляет 255 изображений по 256 пикселей.

Может быть, imwrite сообщает об ошибке. Вы всегда должны проверять возвращаемое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...