21xrx.com
2024-12-22 21:05:58 Sunday
登录
文章检索 我的文章 写文章
C++ OpenCV 入门指南
2023-07-09 13:42:28 深夜i     --     --
C++ OpenCV 入门 指南 图像处理

OpenCV (Open Source Computer Vision) 是一个开源的计算机视觉库,被广泛用于计算机视觉和机器学习领域。它是用 C++ 编写的,支持多种操作系统,如 Windows、Linux 和 MacOS 等。本文将介绍如何在 C++ 中使用 OpenCV。

安装 OpenCV

首先,需要安装 OpenCV。可以从 OpenCV 官方网站下载最新版本。安装的过程中需要选择与自己开发平台对应的编译器类型和版本。安装完毕后,需要添加 Opencv 的库和头文件到项目中。

打开工程文件,进入属性管理器,选中 Debug 或 Release 中的平台,右键单击 Microsoft.Cpp.Win32.User,选择属性,在 VC++ 目录下的 “包含目录” 中添加 OpenCV 的 include 目录,在“库目录”中添加 OpenCV 的 library 目录。

使用 OpenCV

接下来,就可以开始使用 OpenCV 了。

1. 创建图像对象

在使用 OpenCV 进行图像处理的时候,最基本的数据类型是 cv::Mat。cv::Mat 是 C++ 中用于存储图像的类。使用 cv::Mat 可以对图像进行载入、储存、处理和显示等操作。

// 创建一个大小为 640x480 的 8 位 3 通道图像对象

cv::Mat image = cv::Mat::zeros(480, 640, CV_8UC3);

2. 读写图像

OpenCV 支持多种不同格式的图像文件,包括 JPEG、PNG、BMP 等。使用 cv::imread() 函数可以载入一张图像,使用 cv::imwrite() 函数可以将一张图像储存到文件中。

// 从文件中读入一张图像

cv::Mat image = cv::imread("path/to/image.jpg");

// 将图像储存到文件中

cv::imwrite("path/to/output.jpg", image);

3. 图像处理

OpenCV 提供了多种不同的图像处理函数,其中包括颜色空间转换、滤波、形态学变换、阈值处理、边缘检测等。以下是一些简单的示例:

// 将图像转换成灰度空间

cv::Mat gray_image;

cv::cvtColor(image, gray_image, cv::COLOR_BGR2GRAY);

// 对灰度图像进行高斯滤波

cv::GaussianBlur(gray_image, gray_image, cv::Size(3, 3), 0, 0);

// 对灰度图像进行阈值处理

cv::Mat binary_image;

cv::threshold(gray_image, binary_image, 128, 255, cv::THRESH_BINARY);

4. 显示图像

使用 cv::imshow 函数将一张图像显示在窗口中。

// 创建一个名为 "image" 的窗口,并在窗口中显示图像

cv::namedWindow("image", cv::WINDOW_NORMAL);

cv::imshow("image", image);

5. 键盘响应

在窗口中使用键盘响应时,可以通过 cv::waitKey() 函数来等待特定的按键事件,或者通过 cv::setMouseCallback() 函数来响应鼠标事件。

// 等待 ESC 按键事件

int key = cv::waitKey(0);

if (key == 27) {

 // 如果按下的键是 ESC,退出程序

 exit(0);

}

// 捕捉鼠标单击事件

void mouse_callback(int event, int x, int y, int flags, void* param) {

 if (event == cv::EVENT_LBUTTONDOWN) {

  // 如果单击了鼠标左键,输出鼠标坐标

  std::cout << "Mouse position: (" << x << ", " << y << ")" << std::endl;

 }

}

cv::setMouseCallback("image", mouse_callback);

总结

通过本文的介绍,可以学习到如何在 C++ 中使用 OpenCV 进行图像处理和显示。OpenCV 提供了各种不同的函数,可以方便地进行各种图像处理操作。使用 OpenCV 可以实现各种有趣的图像处理和机器学习应用,如人脸检测、目标跟踪、深度学习等。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复