OpenCV kullanıyorum ve cvSaveImage işlevini kullanarak jpeg olarak kaydediyorum, ancak Jpeg sıkıştırma faktörünü bulamadım.OpenCV cvSaveImage Jpeg Sıkıştırma Faktörü
- Muhtemelen bu bulabilir
OpenCV kullanıyorum ve cvSaveImage işlevini kullanarak jpeg olarak kaydediyorum, ancak Jpeg sıkıştırma faktörünü bulamadım.OpenCV cvSaveImage Jpeg Sıkıştırma Faktörü
Şu cvSaveImage() yalnızca iki parametre alması bildirildi:
int cvSaveImage(const char* filename, const CvArr* image);
Ancak, "latest tested snapshot" vardır
: Herhangi bir belge bulamadı oldum#define CV_IMWRITE_JPEG_QUALITY 1
#define CV_IMWRITE_PNG_COMPRESSION 16
#define CV_IMWRITE_PXM_BINARY 32
/* save image to file */
CVAPI(int) cvSaveImage(const char* filename, const CvArr* image,
const int* params CV_DEFAULT(0));
, ancak bu kodun içine girdiğim izlenim, üçüncü parametrede geçmek için bir dizi int değeri oluşturacağınızdır:
int p[3];
p[0] = CV_IMWRITE_JPEG_QUALITY;
p[1] = desired_quality_value;
p[2] = 0;
Kalite değerinin nasıl kodlandığını bilmiyorum ve bunu hiç denemedim, bu yüzden uyarı emri.
Düzenleme:
bu konuda biraz meraklı olmak, indirilen ve OpenCV en son gövde sürümünü inşa ve ıskarta bu kod bit yoluyla yukarıdaki onaylamak başardı:
#include "cv.h"
#include "highgui.h"
int main(int argc, char **argv)
{
int p[3];
IplImage *img = cvLoadImage("test.jpg");
p[0] = CV_IMWRITE_JPEG_QUALITY;
p[1] = 10;
p[2] = 0;
cvSaveImage("out1.jpg", img, p);
p[0] = CV_IMWRITE_JPEG_QUALITY;
p[1] = 100;
p[2] = 0;
cvSaveImage("out2.jpg", img, p);
exit(0);
}
Benim "test.jpg", 2.054 KB oldu, oluşturulan "out1.jpg" 182 KB ve "out2.jpg" 4,009 KB oldu.
Subversion deposundan edinebileceğiniz en son kodu kullanabileceğinizi kabul ederek iyi durumda olmanız gerektiği anlaşılıyor.
BTW, kalite parametresi için aralığı 0-100, varsayılan 95.
OpenCV şimdi jpeg kalitesini ayarlamak için has a parameter olduğunu. Bunun ne zaman yapıldığına tam olarak emin değilim, ama muhtemelen 2.0'dan sonra.
src
olmak kaynak resim içeren okumak çıktı dosya adı olacak imwrite("filename.jpg", src, vector<int>({CV_IMWRITE_JPEG_QUALITY, JPEG_QUALITY});
imwrite("filename.jpeg",src,(vector<int>){CV_IMWRITE_JPEG_QUALITY, 20});
filename.jpeg
: C++ 0x kullanıyorsanız const int JPEG_QUALITY = 80;
Mat src;
// put data in src
vector<int> params;
params.push_back(CV_IMWRITE_JPEG_QUALITY);
params.push_back(JPEG_QUALITY);
imwrite("filename.jpg", src, params);
, bu kısa biçimi kullanabilirsiniz değişken
(vector<int>)
typecasting{CV_IMWRITE_JPEG_QUALITY, 20}
elemanlı bir dizi Param_ID olarak geçirilecek - ve Param_value imwrite fonksiyonunda adam
nokta, teşekkürler! –
Görüntü kalitesini düşürür ve görüntüyü gerçekten deforme eder. Lütfen, görüntü kalitesini bozmadan dosya boyutunu küçülten herhangi bir çözüm önerisinde bulunun. – AnkitRox