图像压缩是通过减少图像文件大小来节省存储空间和带宽的技术。OpenCV可以用于图像压缩,常见的方法包括调整图像质量(针对JPEG)和改变图像尺寸。以下是一个使用C++和OpenCV实现图像压缩的示例。
使用OpenCV进行图像压缩
方法1:调整图像质量(针对JPEG格式)
JPEG格式允许通过调整图像质量来压缩图像。OpenCV提供了cv::imwrite
函数,可以设置JPEG图像的质量参数。
方法2:改变图像尺寸
通过缩小图像尺寸来压缩图像文件大小,这种方法适用于任何图像格式。
示例代码
下面是一个使用OpenCV进行图像压缩的完整示例:
- 读取图像
- 调整图像质量进行压缩
- 改变图像尺寸进行压缩
- 保存压缩后的图像
#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>
int main() {
// 读取图像
cv::Mat image = cv::imread("path_to_image.jpg");
if (image.empty()) {
std::cerr << "Could not open or find the image!" << std::endl;
return -1;
}
// 方法1:调整图像质量进行压缩
std::vector<int> compression_params;
compression_params.push_back(cv::IMWRITE_JPEG_QUALITY);
compression_params.push_back(50); // 设置JPEG图像质量,范围0-100,值越低压缩比越高
// 保存调整质量后的图像
cv::imwrite("compressed_quality.jpg", image, compression_params);
// 方法2:改变图像尺寸进行压缩
cv::Mat resizedImage;
double scaleFactor = 0.5; // 缩小一半
cv::resize(image, resizedImage, cv::Size(), scaleFactor, scaleFactor, cv::INTER_LINEAR);
// 保存改变尺寸后的图像
cv::imwrite("compressed_resized.jpg", resizedImage);
// 显示原始图像和压缩后的图像
cv::imshow("Original Image", image);
cv::imshow("Compressed Quality Image", cv::imread("compressed_quality.jpg"));
cv::imshow("Compressed Resized Image", cv::imread("compressed_resized.jpg"));
// 等待按键按下
cv::waitKey(0);
return 0;
}
解释
- 读取图像: 使用
cv::imread
读取图像文件。如果图像路径不正确或文件不存在,程序会输出错误信息并退出。 - 调整图像质量进行压缩:
- 定义一个
compression_params
向量来存储压缩参数。 - 设置JPEG图像质量参数,范围为0到100,值越低压缩比越高,图像质量越差。
- 使用
cv::imwrite
函数保存压缩后的图像。
- 定义一个
- 改变图像尺寸进行压缩:
- 使用
cv::resize
函数缩小图像尺寸。这里使用一个缩放因子scaleFactor
,将图像尺寸缩小到原来的50%。 - 使用
cv::imwrite
函数保存缩小尺寸后的图像。
- 使用
- 显示图像:
- 使用
cv::imshow
函数显示原始图像和压缩后的图像。 - 使用
cv::waitKey
函数等待用户按键按下,以便关闭显示窗口。
- 使用
这个示例展示了两种常见的图像压缩方法:调整图像质量和改变图像尺寸。你可以根据实际需求选