Hiện nay cvSaveImage() được khai báo để có chỉ có hai thông số:
int cvSaveImage(const char* filename, const CvArr* image);
Tuy nhiên, "latest tested snapshot" có:
#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));
tôi đã không thể tìm thấy bất kỳ tài liệu, nhưng ấn tượng của tôi từ việc chọc qua mã này là bạn sẽ tạo một mảng giá trị int để chuyển vào tham số thứ ba:
int p[3];
p[0] = CV_IMWRITE_JPEG_QUALITY;
p[1] = desired_quality_value;
p[2] = 0;
Tôi không biết giá trị chất lượng được mã hóa như thế nào và tôi chưa bao giờ thử giá trị này, vì vậy hãy làm trống bộ trống.
Edit:
Là một chút tò mò về vấn đề này, tôi đã tải về và xây dựng phiên bản thân mới nhất của OpenCV, và đã có thể khẳng định trên qua bit này mã throwaway:
#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);
}
My "test.jpg" là 2.054 KB, tạo ra "out1.jpg" là 182 KB và "out2.jpg" là 4.009 KB.
Có vẻ như bạn phải ở trong tình trạng tốt, giả sử bạn có thể sử dụng mã mới nhất có sẵn từ kho lưu trữ Subversion.
BTW, phạm vi cho tham số chất lượng là 0-100, mặc định là 95.
tại chỗ trên người, cảm ơn! –
Nó làm giảm chất lượng hình ảnh và thực sự bóp méo hình ảnh. Vui lòng đề xuất bất kỳ giải pháp nào sẽ làm giảm kích thước tệp mà không bóp méo chất lượng hình ảnh. – AnkitRox