图像压缩方案比较

图像压缩是通过减少图像文件大小来节省存储空间和带宽的技术。OpenCV可以用于图像压缩,常见的方法包括调整图像质量(针对JPEG)和改变图像尺寸。以下是一个使用C++和OpenCV实现图像压缩的示例。

使用OpenCV进行图像压缩

方法1:调整图像质量(针对JPEG格式)

JPEG格式允许通过调整图像质量来压缩图像。OpenCV提供了cv::imwrite函数,可以设置JPEG图像的质量参数。

方法2:改变图像尺寸

通过缩小图像尺寸来压缩图像文件大小,这种方法适用于任何图像格式。

示例代码

下面是一个使用OpenCV进行图像压缩的完整示例:

  1. 读取图像
  2. 调整图像质量进行压缩
  3. 改变图像尺寸进行压缩
  4. 保存压缩后的图像
#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;
}

解释

  1. 读取图像: 使用cv::imread读取图像文件。如果图像路径不正确或文件不存在,程序会输出错误信息并退出。
  2. 调整图像质量进行压缩:
    • 定义一个compression_params向量来存储压缩参数。
    • 设置JPEG图像质量参数,范围为0到100,值越低压缩比越高,图像质量越差。
    • 使用cv::imwrite函数保存压缩后的图像。
  3. 改变图像尺寸进行压缩:
    • 使用cv::resize函数缩小图像尺寸。这里使用一个缩放因子scaleFactor,将图像尺寸缩小到原来的50%。
    • 使用cv::imwrite函数保存缩小尺寸后的图像。
  4. 显示图像:
    • 使用cv::imshow函数显示原始图像和压缩后的图像。
    • 使用cv::waitKey函数等待用户按键按下,以便关闭显示窗口。

这个示例展示了两种常见的图像压缩方法:调整图像质量和改变图像尺寸。你可以根据实际需求选

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

公孙无语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值