基于 OpenCV 的图像与视频处理

基于 OpenCV 的图像处理

一、实验背景

OpenCV 是一个开源的计算机视觉库,广泛应用于图像处理、视频分析、目标检测等领域。通过学习 OpenCV,可以快速实现图像和视频的处理功能,为复杂的应用开发

奠定基础。本实验旨在通过实际代码示例,掌握 OpenCV 的基本功能和使用方法。

二、实验目的

  1. 学习如何使用 OpenCV 进行图像处理。

  2. 掌握 OpenCV 的视频读取和播放功能。

  3. 实现视频录制功能,并理解视频流的处理逻辑。

三、实验内容

  1. 创建一个代码文件夹 code ,并在其中创建 test.cpp 文件。

  2. 将以下代码复制到 test.cpp 文件中:

    #include <opencv2/opencv.hpp>
    using namespace cv;
    using namespace std;

    int main(int argc, char** argv) {
    // 加载图像
    Mat image = imread("lena.jpg", IMREAD_COLOR); // 默认加载彩色图像

    复制代码
     // 检查图像是否成功加载
     if (image.empty()) {
         cout << "无法加载图像!请检查文件路径。" << endl;
         return -1;
     }
    
     // 创建一个用于存储灰度图像的 Mat 对象
     Mat gray_image;
    
     // 使用 OpenCV 的 cvtColor 函数将彩色图像转换为灰度图像
     cvtColor(image, gray_image, COLOR_BGR2GRAY);
    
     // 保存灰度图像
     imwrite("gray_image.png", gray_image);
    
     // 显示原始图像和灰度图像
     namedWindow("Original Image", WINDOW_AUTOSIZE);
     imshow("Original Image", image);
    
     namedWindow("Gray Image", WINDOW_AUTOSIZE);
     imshow("Gray Image", gray_image);
    
     // 等待用户按键后关闭窗口
     waitKey(0);
    
     return 0;

    }

3.编译代码

复制代码
g++ test1.cpp -o test1 `pkg-config --cflags --libs opencv`

4.准备一张名为lena.jpg的图片,与代码文件放在同一目录下。

5.运行程序

复制代码
./test

四、实验结果

  • 程序读取lena.jpg图片,对图片进行径向渐变处理后,生成新的图片gray_image.png
  • 定义一个 Mat 对象 gray_image,用于存储转换后的灰度图像。
  • 使用 cvtColor 函数将彩色图像转换为灰度图像。
  • 参数 COLOR_BGR2GRAY 表示从 BGR 颜色空间转换到灰度颜色空间。
  • 使用 namedWindowimshow 分别显示原始图像和灰度图像。

COLOR_BGR2GRAY 表示从 BGR 颜色空间转换到灰度颜色空间。

  • 使用 namedWindowimshow 分别显示原始图像和灰度图像。
相关推荐
茯苓gao5 小时前
嵌入式开发笔记:CANopen相关移位运算与通信协议术语详解
网络·嵌入式硬件·学习·信息与通信
HERR_QQ9 小时前
强化学习的数学原理 学习笔记
人工智能·笔记·学习·自动驾驶
MartinYeung510 小时前
[论文学习]DP-Fusion:面向大语言模型的令牌级差分隐私推理-深度解析
人工智能·学习·语言模型
zwenqiyu10 小时前
非线性字符串数据结构串讲
数据结构·c++·学习·算法
MartinYeung511 小时前
[论文学习]SecureGate:通过令牌级门控学习何时安全地揭示PII-深度解析
学习·安全
大鱼>12 小时前
超参数调优进阶:Optuna/Bayesian/Early Stopping
人工智能·学习·机器学习·聚类
liuyicenysabel12 小时前
多服务上线日记二:
服务器·笔记·学习
小弥儿13 小时前
GitHub今日热榜 | 2026-07-05:阿里巴巴浏览器Agent上榜
学习·开源·github
‿hhh13 小时前
Dify核心模块详解:从文本生成到智能体
人工智能·学习·microsoft·agent·上下文·记忆
辰海Coding13 小时前
MiniSpring框架学习笔记-动态代理:如何在运行时插入逻辑?
java·笔记·学习·spring·动态代理