图像压缩方案比较

图像压缩是通过减少图像文件大小来节省存储空间和带宽的技术。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函数等待用户按键按下,以便关闭显示窗口。

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

相关推荐

  1. 图像压缩方案比较

    2024-06-07 13:28:06       25 阅读
  2. Android之图片压缩几种方式

    2024-06-07 13:28:06       38 阅读
  3. 后端|压缩Base64图片的两种方式

    2024-06-07 13:28:06       31 阅读
  4. 图像与视频压缩算法

    2024-06-07 13:28:06       63 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 13:28:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 13:28:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 13:28:06       82 阅读
  4. Python语言-面向对象

    2024-06-07 13:28:06       91 阅读

热门阅读

  1. OpenHarmony及鸿蒙应用的屏幕亮度获取以及设置

    2024-06-07 13:28:06       26 阅读
  2. 设计模式—状态模式

    2024-06-07 13:28:06       29 阅读
  3. Python实现简单负载均衡

    2024-06-07 13:28:06       32 阅读
  4. React基础教程(五):事件处理

    2024-06-07 13:28:06       25 阅读
  5. PDF格式分析(八十三)——屏幕注释(screen)

    2024-06-07 13:28:06       22 阅读
  6. 代码随想录算法训练营第28天|回溯

    2024-06-07 13:28:06       33 阅读
  7. 使用Service Worker、Web Workers进行地图渲染优化

    2024-06-07 13:28:06       20 阅读
  8. 安全通信网络

    2024-06-07 13:28:06       28 阅读
  9. 眼在手上的手眼标定(matlab+python)实测精度±1mm

    2024-06-07 13:28:06       18 阅读
  10. spring boot 白盒测试实战

    2024-06-07 13:28:06       26 阅读
  11. FPGA verilog入门案例笔记一

    2024-06-07 13:28:06       34 阅读