【OpenCV(C++)快速入门】--opencv学习

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边缘检测中的双阈值检测。低阈值用于确定弱边缘。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值