C++如何进行图像处理_使用OpenCV库在C++中读取、修改和保存图片

发布时间 - 2026-01-04 00:00:00    点击率:
OpenCV是C++中图像处理最常用且功能强大的库,支持读取、修改和保存图像。1. 安装配置:Windows用户可用vcpkg或预编译库,Linux用sudo apt install libopencv-dev,macOS用brew install opencv;包含头文件#include 并使用命名空间cv。2. 读取图像:用imread()函数加载PNG、JPEG等格式,支持IMREAD_COLOR、IMREAD_GRAYSCALE、IMREAD_UNCHANGED参数,需检查Mat是否为空。3. 修改图像:图像为Mat对象,可遍历像素或调用函数操作,如cvtColor转灰度图,convertTo调亮度,line画线,或通过img.at(i,j)逐像素修改通道值。4. 保存图像:用imwrite()将Mat保存为文件,自动根据扩展名选择格式,返回bool表示成功与否。掌握这四步可实现基本图像处理,OpenCV还支持滤波、边缘检测、人脸识别等高级功能。

在C++中进行图像处理,最常用且功能强大的库是OpenCV。它提供了丰富的函数来读取、修改和保存图像,适用于各种计算机视觉任务。下面介绍如何使用OpenCV在C++中实现基本的图像操作。

1. 安装与配置OpenCV

要使用OpenCV,首先需要安装并配置环境:

  • Windows用户可使用vcpkg或预编译的OpenCV库,配合Visual Studio使用。
  • Linux用户可通过包管理器安装,例如:sudo apt install libopencv-dev
  • macOS用户可使用Homebrew:brew install opencv

配置好项目后,在代码中包含头文件:

#include 
using namespace cv;

2. 读取图像

使用imread()函数可以加载图像文件。支持格式包括PNG、JPEG、BMP等。

立即学习“C++免费学习笔记(深入)”;

示例代码:

Mat img = imread("input.jpg");
if (img.empty()) {
    std::cout << "无法读取图像!检查路径是否正确。" << std::endl;
    return -1;
}

参数说明:

  • IMREAD_COLOR:以彩色模式读取(默认)。
  • IMREAD_GRAYSCALE:转为灰度图。
  • IMREAD_UNCHANGED:包含Alpha通道。

3. 修改图像

图像本质是矩阵(Mat对象),可以通过遍历像素或调用函数进行修改。

常见操作示例:

  • 转为灰度图:Mat gray; cvtColor(img, gray, COLOR_BGR2GRAY);
  • 调整亮度:使用convertTo()或逐像素操作。
  • 绘制图形:如画线:line(img, Point(0,0), Point(100,100), Scalar(0,0,255), 2);

遍历像素修改亮度的例子:

for (int i = 0; i < img.rows; i++) {
    for (int j = 0; j < img.cols; j++) {
        img.at(i,j)[0] += 50; // 蓝色通道加50
        img.at(i,j)[1] += 50; // 绿色通道
        img.at(i,j)[2] += 50; // 红色通道
    }
}

4. 保存图像

使用imwrite()将Mat对象保存为文件。

示例:

bool success = imwrite("output.png", img);
if (success) {
    std::cout << "图像已成功保存!" << std::endl;
} else {
    std::cout << "保存失败!" << std::endl;
}

支持自动根据扩展名选择格式(如.png、.jpg)。

基本上就这些。掌握读取、修改和保存三步,就能在C++中灵活处理图像。OpenCV还支持滤波、边缘检测、人脸识别等高级功能,适合深入学习。


# linux  # windows  # 计算机  # mac  # c++  # macos  # win  # 人脸识别  # cos  # 命名空间  # include  # bool  # 对象  # visual studio  # opencv  # 遍历  # 图像处理  # 扩展名  # 最常用  # 保存为  # 头文件  # 边缘  # 加载  # 画线  # 适用于 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: JS碰撞运动实现方法详解  Android自定义控件实现温度旋转按钮效果  Laravel怎么实现验证码(Captcha)功能  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  如何彻底删除建站之星生成的Banner?  Laravel如何与Inertia.js和Vue/React构建现代单页应用  android nfc常用标签读取总结  如何安全更换建站之星模板并保留数据?  实例解析Array和String方法  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  如何用低价快速搭建高质量网站?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  浅谈Javascript中的Label语句  佛山企业网站制作公司有哪些,沟通100网上服务官网?  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  中国移动官方网站首页入口 中国移动官网网页登录  Android okhttputils现在进度显示实例代码  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  简历在线制作网站免费版,如何创建个人简历?  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  如何快速生成橙子建站落地页链接?  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  node.js报错:Cannot find module &#39;ejs&#39;的解决办法  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  如何确保FTP站点访问权限与数据传输安全?  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  如何快速生成专业多端适配建站电话?  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  iOS验证手机号的正则表达式  深圳网站制作培训,深圳哪些招聘网站比较好?  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  SQL查询语句优化的实用方法总结  昵图网官网入口 昵图网素材平台官方入口  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法