基于 OpenCV 的图像与视频处理

发布于:2025-04-09 ⋅ 阅读:(74) ⋅ 点赞:(0)

基于 OpenCV 的图像与视频处理

一、实验背景

OpenCV 是一个开源的计算机视觉库,广泛应用于图像处理、视频分析、目标检测等领域。通过学习 OpenCV,可以快速实现图像和视频的处理功能,为复杂的应用开发奠定基础。本实验旨在通过实际代码示例,掌握 OpenCV 的基本功能和使用方法。

二、实验目的
  1. 学习如何使用 OpenCV 进行图像处理。
  2. 掌握 OpenCV 的视频读取和播放功能。
  3. 实现视频录制功能,并理解视频流的处理逻辑。
三、实验环境
  • 操作系统:Ubuntu
四、实验内容
1. 图像处理示例

实验步骤:

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

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

    #include <opencv2/highgui.hpp>
    #include <opencv2/opencv.hpp>
    using namespace cv;
    using namespace std;
    
    int main(int argc, char** argv)
    {
        CvPoint center;
        double scale = -3;
    
        IplImage* image = cvLoadImage("lena.jpg");
        argc == 2 ? cvLoadImage(argv[1]) : 0;
    
        cvShowImage("Image", image);
    
        if (!image) return -1;
        center = cvPoint(image->width / 2, image->height / 2);
        for (int i = 0; i < image->height; i++)
            for (int j = 0; j < image->width; j++) {
                double dx = (double)(j - center.x) / center.x;
                double dy = (double)(i - center.y) / center.y;
                double weight = exp((dx*dx + dy*dy)*scale);
                uchar* ptr = &CV_IMAGE_ELEM(image, uchar, i, j * 3);
                ptr[0] = cvRound(ptr[0] * weight);
                ptr[1] = cvRound(ptr[1] * weight);
                ptr[2] = cvRound(ptr[2] * weight);
            }
    
        Mat src;
        src = cvarrToMat(image);
        cv::imwrite("test.png", src);
    
        cvNamedWindow("test", 1);
        imshow("test", src);
        cvWaitKey();
        return 0;
    }
    
  3. 编译代码:

    g++ test1.cpp -o test1 `pkg-config --cflags --libs opencv`
    

    在这里插入图片描述
    在这里插入图片描述

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

  5. 运行程序:

    ./test1
    

实验结果:

  • 程序读取 lena.jpg 图片,对图片进行亮度加权处理后,生成新的图片 test.png在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 代码中使用了 OpenCV 的 cvLoadImage 函数加载图片,cvShowImage 显示图片。

  • 通过循环遍历图片的每个像素,对像素值进行加权处理,实现图片的亮度变化。

  • 使用 cv::imwrite 将处理后的图片保存为 test.png

六、参考资料
  1. OpenCV 官方文档:https://docs.opencv.org/
  2. CSDN 博客:https://blog.csdn.net/weixin_56393108/article/details/120708930