0 配置环境
配置环境网上很多资料,这里就不赘述了。
笔者使用的是VS2022+opencv4.9.0
测试配置环境
// 打开摄像头样例
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgcodecs/imgcodecs.hpp>
#include <opencv2/core/core.hpp>
using namespace cv;
int main()
{
VideoCapture cap(0);
Mat frame;
while (1)
{
cap >> frame;
imshow("调用摄像头", frame);
waitKey(30);
}
return 0;
}
如果配置正确,会调用电脑摄像头
1 读图片和视频
读图片
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
#include <string>
images ///
int main()
{
std::string path = "Resources/test.png"; // 图片路径
cv::Mat img = cv::imread(path); // 读数据
cv::imshow("Image", img); // 显示数据
cv::waitKey(0); // 增加延时,0表示无穷
return 0;
}
读视频
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
#include <string>
video ///
// 视频是一系列的图像,因此需要遍历所有的图像/帧,捕获并且显示
int main()
{
std::string path = "Resources/test_video.mp4"; // 视频路径
cv::VideoCapture capture(path);
cv::Mat img;
while (1)
{
capture.read(img); // 读到img中
cv::imshow("Vedio", img); // 显示
cv::waitKey(20); // 延时20ms,数值越大,视频越慢
}
return 0;
}
读相机
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
#include <string>
Webcam ///
// 视频是一系列的图像,因此需要遍历所有的图像/帧,捕获并且显示
int main()
{
cv::VideoCapture capture(0); // 只有一个相机
cv::Mat img;
while (1)
{
capture.read(img); // 读到img中
cv::imshow("Vedio", img); // 显示
cv::waitKey(1); // 延时1ms,数值越大,视频越慢
}
return 0;
}
2 基本函数
cvtColor
// cvt是convert的缩写,将图像从一种颜色空间转换为另一种颜色空间
// 把img转换成imgGray
cv::cvtColor(img, imgGray, cv::COLOR_BGR2GRAY);
img
:输入图像,这是一个BGR格式的彩色图像。
imgGray
:输出图像,转换后的灰度图像。
cv::COLOR_BGR2GRAY
:转换代码,表示将BGR格式的图像转换为灰度图像。
GaussianBlur
高斯模糊处理
// 使用高斯滤波器模糊图像。该函数将源图像与指定的高斯核进行卷积,Size(7,7)是核大小,数字越大越模糊
// 把img模糊成imgBlur
cv::GaussianBlur(img, imgBlur, cv::Size(7, 7), 5, 0);
cv::GaussianBlur
是OpenCV中的一个函数,用于对图像进行高斯模糊处理。高斯模糊是一种图像处理技术,通过使用高斯核对图像进行卷积,可以有效地减少图像的噪声和细节,使图像变得模糊。参数解释:
img
:输入图像,这是一个cv::Mat
类型的对象,表示要进行高斯模糊处理的图像。
imgBlur
:输出图像,经过高斯模糊处理后的图像,也是一个cv::Mat
类型的对象。
cv::Size(7, 7)
:高斯核的大小,表示高斯核的宽度和高度。这里使用7×7的高斯核。高斯核的大小必须是正奇数,以确保核的中心能够对准图像的每个像素。
5
:高斯核的标准差(σ)在X方向上的值。标准差越大,模糊效果越明显。如果设置为0,OpenCV会根据高斯核的大小自动计算标准差。
0
:高斯核的标准差(σ)在Y方向上的值。如果设置为0,OpenCV会使用与X方向相同的标准差。
Canny
边缘检测
// 边缘检测,阈值1,2可调,目的:显示更多的边缘,使用模糊的图像
cv::Canny(imgBlur, imgCanny, 25, 75);
cv::Canny
是OpenCV中的一个函数,用于执行Canny边缘检测算法。Canny边缘检测是一种多步骤的算法,包括高斯模糊、梯度计算、非极大值抑制和双阈值检测等步骤。参数解释:
imgBlur
:输入图像,这是一个经过高斯模糊处理的cv::Mat
类型的对象。高斯模糊处理可以减少图像的噪声,使边缘检测更加准确。
imgCanny
:输出图像,经过Canny边缘检测后的图像,也是一个cv::Mat
类型的对象。输出图像是一个二值图像,边缘部分的像素值为255,非边缘部分的像素值为0。
25
:低阈值(threshold1
),用于Canny边缘检测中的双阈值检测。低阈值用于确定弱边缘。