Всех приветствую.
В процессе работы с OpenCV столкнулся с такой проблемой:
Рабочий стол, размером 1920x1080, весит аж 382784 байтов!
Начал искать в документации способ сжатия изображения.
Нашел такую статью:
https://docs.opencv.org/3.0-beta/modules/imgcodecs/doc/reading_and_writing_images.html#bool%20imwrite(const%20String&%20filename,%20InputArray%20img,%20const%20vector%3Cint%3E&%20params)
В ней нашел такой код:
C: int cvSaveImage(const char* filename, const CvArr* image, const int* params=0 ) Parameters: filename – Name of the file. image – Image to be saved. params – Format-specific save parameters encoded as pairs paramId_1, paramValue_1, paramId_2, paramValue_2, ... . The following parameters are currently supported:
For JPEG, it can be a quality ( CV_IMWRITE_JPEG_QUALITY ) from 0 to 100 (the higher is the better). Default value is 95.
Как мне можно его сюда прикрутить?
Что-то типа такого:
int quality = 70;
imencode(".jpg", s, buf, quality);
Код:
Mat s;
vector<uchar> buf;
while (1) {
r->GetDesktopMat(s);
imencode(".jpg", s, buf);
cout << buf.size() << endl; // 382784 - 1920x1080 resolution
}
Об описании параметров и способе их задания Вы можете прочесть здесь.
Mat s;
vector<uchar> buf;
vector<int> opts(2);
opts[0] = cv::IMWRITE_JPEG_QUALITY;
opts[1] = 70;
while (1) {
r->GetDesktopMat(s);
imencode(".jpg", s, buf, opts);
}
возник вопрос: Возможно ли сжать видеофайлы или видеопоток? Пытался использовать lz4 для сжатия данных, сначала использовал этот метод сжатия...
Пишу алгоритм бинарной сортировки (в целях обучения)Компилятор - MinGW-w64 с флагом оптимизации -o0