🌈个人主页: 鑫宝Code
🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础
💫个人格言: "如无必要,勿增实体"
文章目录
- OpenCV入门与基础知识
- 简介
- 安装与环境配置
- Windows
- Linux
- macOS
- 核心数据结构
- Mat
- Scalar
- Point
- Rect
- 基本图像操作
- 读写图像
- 显示图像
- 几何变换
- 颜色空间转换
- 基本绘图操作
- 绘制线条
- 绘制矩形
- 绘制圆形
- 绘制文本
- 核心函数
- 滤波
- 图像混合
- 位操作
- 其他函数
- 总结
OpenCV入门与基础知识
简介
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它由Intel公司发起并参与管理。OpenCV提供了一系列用于图像处理和计算机视觉的算法和工具,支持多种编程语言,如C++、Python、Java等,并且可以运行在Windows、Linux、macOS等多种操作系统上。
OpenCV广泛应用于各个领域,包括人机交互、机器人、安防监控、医疗影像、汽车驾驶等。它提供了丰富的功能,涵盖图像处理、视频分析、目标检测与跟踪、3D视觉等多个方面。
安装与环境配置
Windows
在Windows系统上安装OpenCV,可以通过预编译好的安装包进行安装。您可以从OpenCV官网(https://opencv.org/releases/)下载适合您系统的安装包,然后按照提示一步步安装。
安装完成后,您需要配置环境变量,以便在代码中引用OpenCV库。具体步骤如下:
- 右键点击"计算机"或"此电脑",选择"属性"。
- 点击"高级系统设置"。
- 点击"环境变量"。
- 在"系统变量"中,找到"Path"变量,点击"编辑"。
- 点击"新建",输入OpenCV安装路径下的
\build\x64\vc15\bin
(具体路径根据您的安装版本而定)。 - 点击"确定"保存更改。
Linux
在Linux系统上安装OpenCV,可以通过包管理器进行安装。以Ubuntu为例,您可以在终端中执行以下命令:
sudo apt-get update
sudo apt-get install libopencv-dev
这将安装OpenCV及其依赖项。如果您需要特定版本的OpenCV,可以从源码编译安装。
macOS
在macOS系统上安装OpenCV,可以使用Homebrew包管理器。在终端中执行以下命令:
brew install opencv
这将安装最新版本的OpenCV。如果您需要特定版本,可以指定版本号,例如:
brew install opencv@4
核心数据结构
OpenCV提供了一些核心数据结构,用于存储和处理图像、视频和其他数据。以下是一些常用的数据结构:
Mat
Mat
是OpenCV中最重要的数据结构,用于存储图像数据。它是一个二维或多维的密集数组,可以存储不同类型的数据,如CV_8UC1
(8位无符号单通道)、CV_32FC3
(32位浮点三通道)等。
// 创建一个3通道的512x512的8位无符号整型矩阵
cv::Mat image = cv::Mat::zeros(512, 512, CV_8UC3);
Scalar
Scalar
是一个四元数据结构,通常用于表示颜色或像素值。它包含四个元素,分别对应蓝色、绿色、红色和Alpha通道。
// 创建一个蓝色的Scalar
cv::Scalar blue(255, 0, 0);
Point
Point
是一个二维点的数据结构,用于表示图像或视频中的坐标。它包含两个元素,分别表示x和y坐标。
// 创建一个点(10, 20)
cv::Point pt(10, 20);
Rect
Rect
是一个矩形的数据结构,用于表示图像或视频中的矩形区域。它包含四个元素,分别表示矩形的x、y坐标、宽度和高度。
// 创建一个矩形(10, 20, 100, 200)
cv::Rect rect(10, 20, 100, 200);
基本图像操作
读写图像
OpenCV提供了imread()
和imwrite()
函数,用于读取和写入图像文件。
#include <opencv2/opencv.hpp>
int main()
{
// 读取图像
cv::Mat image = cv::imread("image.jpg");
// 显示图像
cv::imshow("Image", image);
cv::waitKey(0);
// 写入图像
cv::imwrite("output.png", image);
return 0;
}
显示图像
OpenCV提供了imshow()
函数,用于在窗口中显示图像。
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat image = cv::imread("image.jpg");
// 显示图像
cv::imshow("Image", image);
cv::waitKey(0);
return 0;
}
几何变换
OpenCV提供了多种几何变换函数,如resize()
、rotate()
、warpAffine()
等,用于调整图像的大小、旋转、平移等操作。
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat image = cv::imread("image.jpg");
// 调整图像大小
cv::resize(image, image, cv::Size(800, 600));
// 旋转图像
cv::Point2f center(image.cols / 2.0, image.rows / 2.0);
cv::Mat rotation_matrix = cv::getRotationMatrix2D(center, 45, 1.0);
cv::warpAffine(image, image, rotation_matrix, image.size());
cv::imshow("Image", image);
cv::waitKey(0);
return 0;
}
颜色空间转换
OpenCV支持多种颜色空间,如BGR、HSV、Gray等。您可以使用cvtColor()
函数在不同颜色空间之间转换。
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat image = cv::imread("image.jpg");
// 转换为灰度图像
cv::Mat gray;
cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);
cv::imshow("Gray", gray);
cv::waitKey(0);
return 0;
}
基本绘图操作
OpenCV提供了一些基本的绘图函数,用于在图像上绘制线条、矩形、圆形、文本等。
绘制线条
使用line()
函数可以在图像上绘制线条。
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat image = cv::Mat::zeros(500, 500, CV_8UC3);
// 绘制线条
cv::line(image, cv::Point(100, 100), cv::Point(400, 400), cv::Scalar(0, 0, 255), 3);
cv::imshow("Image", image);
cv::waitKey(0);
return 0;
}
绘制矩形
使用rectangle()
函数可以在图像上绘制矩形。
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat image = cv::Mat::zeros(500, 500, CV_8UC3);
// 绘制矩形
cv::rectangle(image, cv::Point(100, 100), cv::Point(400, 400), cv::Scalar(0, 255, 0), 2);
cv::imshow("Image", image);
cv::waitKey(0);
return 0;
}
绘制圆形
使用circle()
函数可以在图像上绘制圆形。
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat image = cv::Mat::zeros(500, 500, CV_8UC3);
// 绘制圆形
cv::circle(image, cv::Point(250, 250), 100, cv::Scalar(255, 0, 0), -1);
cv::imshow("Image", image);
cv::waitKey(0);
return 0;
}
绘制文本
使用putText()
函数可以在图像上绘制文本。
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat image = cv::Mat::zeros(500, 500, CV_8UC3);
// 绘制文本
cv::putText(image, "Hello, OpenCV!", cv::Point(100, 100), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(255, 255, 255), 2);
cv::imshow("Image", image);
cv::waitKey(0);
return 0;
}
核心函数
OpenCV提供了许多核心函数,用于执行各种图像处理和计算机视觉任务。以下是一些常用的核心函数:
滤波
OpenCV提供了多种滤波函数,用于对图像进行平滑、锐化、边缘检测等操作。常用的滤波函数包括blur()
、GaussianBlur()
、medianBlur()
、Laplacian()
、Sobel()
等。
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat image = cv::imread("image.jpg");
// 高斯滤波
cv::Mat blurred;
cv::GaussianBlur(image, blurred, cv::Size(5, 5), 0);
cv::imshow("Blurred", blurred);
cv::waitKey(0);
return 0;
}
图像混合
OpenCV提供了addWeighted()
函数,用于将两个图像进行线性混合。这在图像拼接、alpha混合等场景中非常有用。
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat image1 = cv::imread("image1.jpg");
cv::Mat image2 = cv::imread("image2.jpg");
// 图像混合
double alpha = 0.5;
double beta = 1.0 - alpha;
cv::Mat blended;
cv::addWeighted(image1, alpha, image2, beta, 0.0, blended);
cv::imshow("Blended", blended);
cv::waitKey(0);
return 0;
}
位操作
OpenCV提供了一些位操作函数,如bitwise_and()
、bitwise_or()
、bitwise_xor()
和bitwise_not()
。这些函数可用于执行像素级别的操作,如图像遮罩、背景移除等。
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat image = cv::imread("image.jpg");
cv::Mat mask = cv::imread("mask.jpg", cv::IMREAD_GRAYSCALE);
// 位操作
cv::Mat masked;
cv::bitwise_and(image, image, masked, mask);
cv::imshow("Masked", masked);
cv::waitKey(0);
return 0;
}
其他函数
OpenCV还提供了许多其他有用的函数,如calcHist()
用于计算直方图、findContours()
用于查找轮廓、matchTemplate()
用于模板匹配等。这些函数可以帮助您完成各种图像处理和计算机视觉任务。
总结
本文介绍了OpenCV的基本概念、安装配置、核心数据结构、基本图像操作、绘图操作和核心函数。通过学习这些基础知识,您将能够开始使用OpenCV进行图像处理和计算机视觉应用的开发。在后续的文章中,我们将深入探讨OpenCV在高级图像处理和计算机视觉应用中的使用。