基于 OpenCV 的图像与视频处理
一、实验背景
OpenCV 是一个开源的计算机视觉库,广泛应用于图像处理、视频分析、目标检测等领域。通过学习 OpenCV,可以快速实现图像和视频的处理功能,为复杂的应用开发奠定基础。本实验旨在通过实际代码示例,掌握 OpenCV 的基本功能和使用方法。
二、实验目的
- 学习如何使用 OpenCV 进行图像处理。
- 掌握 OpenCV 的视频读取和播放功能。
- 实现视频录制功能,并理解视频流的处理逻辑。
三、实验环境
- 操作系统:Ubuntu
四、实验内容
1. 图像处理示例
实验步骤:
创建一个代码文件夹
code
,并在其中创建test1.cpp
文件。将以下代码复制到
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; }
编译代码:
g++ test1.cpp -o test1 `pkg-config --cflags --libs opencv`
准备一张名为
lena.jpg
的图片,与代码文件放在同一目录下。运行程序:
./test1
实验结果:
程序读取
lena.jpg
图片,对图片进行亮度加权处理后,生成新的图片test.png
。
代码中使用了 OpenCV 的
cvLoadImage
函数加载图片,cvShowImage
显示图片。通过循环遍历图片的每个像素,对像素值进行加权处理,实现图片的亮度变化。
使用
cv::imwrite
将处理后的图片保存为test.png
。
六、参考资料
- OpenCV 官方文档:https://docs.opencv.org/
- CSDN 博客:https://blog.csdn.net/weixin_56393108/article/details/120708930