08. tháng 3 2025
Khi xử lý hình ảnh bằng OpenCV, kích thước tệp sau khi xử lý thường rất lớn. Ví dụ như một file JPG 200KB, sau khi xử lý và lưu dưới định dạng PNG có thể tăng lên tới 1.8MB. Nếu chỉ xử lý cục bộ thì không có vấn đề gì, nhưng nếu thực hiện trên máy chủ, mỗi lần tải về sẽ gây lãng phí băng thông nghiêm trọng đồng thời tạo áp lực lên không gian đĩa.
Do đó, việc nén hình ảnh là hết sức cần thiết.
Nén PNG:
cv2.imwrite('hinh_nen.png', hinh_anh, [cv2.IMWRITE_PNG_COMPRESSION, 9])
Tham số tương ứng cho JPEG:
Đối với JPEG, nó có thể là chất lượng từ 0 đến 100 (càng cao càng tốt). Giá trị mặc định là 95.
cv2.imwrite(duong_dan_ket_qua, hinh_anh, [int(cv2.IMWRITE_JPEG_QUALITY), 98])
JPEG2000 là phiên bản nâng cấp của JPEG, tỷ lệ nén cao hơn khoảng 30% so với JPEG và hỗ trợ cả nén mất dữ liệu lẫn không mất dữ liệu. Một đặc điểm quan trọng của định dạng JPEG2000 là khả năng truyền dần, nghĩa là trước tiên truyền khung hình tổng thể rồi dần dần tăng chất lượng hình ảnh, khiến hình ảnh hiển thị cá độ bóng đá từ mờ đến rõ nét.
Tuy nhiên, vẫn chưa chắc chắn liệu ứng dụng WeChat Mini Program có hỗ trợ JPEG2000 hay không. Tài liệu chính thức chỉ nói chung chung là hỗ trợ JPG nhưng không rõ có bao gồm JPEG2000 hay không. Vì vậy, tốt nhất là kiểm tra trực tiếp trong môi trường thực tế.
Đuôi tập tin của JPEG 2000 thường là .jp2, loại MIME là image/jp2. Để an toàn, nên sử dụng định dạng JPG.
Sau khi điều chỉnh tham số chất lượng lên 98, kích thước hình ảnh đã giảm từ 1.8MB (PNG) xuống còn 400KB. Mặc dù có sự khác biệt rõ rệt về mặt thị giác, nhưng vẫn có thể chấp nhận được.
Tôi đã phát triển một ứng dụng WeChat Mini Program xử lý hình ảnh trực tuyến bằng OpenCV, mời bạn trải nghiệm! !Ứng dụng xử lý hình ảnh OpenCV trên WeChat Mini Program