首页 > 其他分享 >opencv学习笔记(一)

opencv学习笔记(一)

时间:2024-08-12 16:25:09浏览次数:9  
标签:int InputArray 笔记 像素 学习 opencv 图像 类型 CV

前言

本文为本人观看b站视频学习opencv的笔记分享,如有错误欢迎指正,如有侵权联系我删除,视频链接

一、Read Images Videos and Webcams

#include<opencv2/imgcodecs.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/imgproc.hpp>
#include<iostream>

using namespace std;
using namespace cv;

/// <summary>
/// Images
/// </summary>
//void main() {
//	string path = "Resources/test.png";
//	Mat img=imread(path);//matrix data type 由opencv引入来处理图像
//	imshow("Image", img);
//	waitKey(0);//增加延时,0表示无穷
//}


/// <summary>
/// Video
/// //视频是一系列图像,需要遍历所有图像或帧 一一捕获并显示,因此将使用while循环
/// </summary>
//void main() {
//	string path = "Resources/test_video.mp4";
//	VideoCapture cap(path);
//	Mat img;
//
//	while (true) {
//		cap.read(img);
//		imshow("Image", img);
//		waitKey(20);//增加延时 20ms
//	}
//	
//}

/// <summary>
/// Webcam
/// 与导入视频不同的是,不需要视频路径,只需要给相机ID,id=0表示默认的摄像头
/// </summary>
//void main() {
//	VideoCapture cap(0);//相机id=0
//	Mat img;
//
	//while (true) {
	//	cap.read(img);
	//	imshow("Image", img);
	//	waitKey(1);//增加延时 1ms,以免太慢
	//}
//
//}

二、Basic Functions

1、颜色空间变换
函数原型

void cv::cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0)

参数详解

1.src:
类型:InputArray(Python中为图像ndarray对象,C++中为cv::InputArray)。
说明:这是要进行颜色空间转换的原始图像。在Python中,通常使用cv2.imread()函数读取的图像作为输入。需要注意的是,OpenCV默认读取的图像颜色空间是BGR,而不是常见的RGB。
2.dst(可选):
类型:OutputArray(Python中为图像ndarray对象,C++中为cv::OutputArray)。
说明:这是颜色空间转换后的输出图像。如果提供了这个参数,转换后的图像将被存储在这里。如果不提供,OpenCV将自动分配内存来存储转换后的图像。
3.code:
类型:int。
说明:这是颜色空间转换的标识符,指定了源图像和目标图像之间的转换类型。例如,cv2.COLOR_BGR2GRAY用于将BGR图像转换为灰度图像,cv2.COLOR_BGR2HSV用于将BGR图像转换为HSV图像等。OpenCV支持多种颜色空间转换类型,具体可以在OpenCV的官方文档中查找。
4.dstCn(可选,默认为0):
类型:int。
说明:这是输出图像的通道数。如果设置为0,则通道数将由输入图像和转换类型自动确定。对于大多数转换,这个参数可以省略。

在这里插入图片描述
2、高斯滤波
函数原型

void cv::GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT)

参数详解

1.src:
类型:InputArray(Python)或cv::InputArray(C++)。
说明:要进行高斯滤波的输入图像。可以是任意通道数,但图像深度必须为CV_8U、CV_16U、CV_16S、CV_32F或CV_64F。
2.dst:
类型:OutputArray(Python)或cv::OutputArray(C++)。
说明:输出图像,与输入图像有相同的类型和尺寸。如果为None(Python)或未指定(C++),则函数会自动分配内存。
3.ksize:
类型:Size(Python和C++)。
说明:高斯核的大小,即卷积核的宽和高。这两个值必须是正奇数,如(3,3)、(5,5)、(7,7)等。如果ksize.width和ksize.height都为0,则它们的值将由sigma参数计算得出。
4.sigmaX:
类型:double。
说明:高斯核在X方向上的标准差。它决定了高斯核在X方向上的宽度。如果sigmaY为0,则sigmaY将与sigmaX相同。
5.sigmaY(可选):
类型:double。
说明:高斯核在Y方向上的标准差。如果未指定(在Python中为省略,在C++中默认为0),则sigmaY将与sigmaX相同。如果sigmaX和sigmaY都为0,则这两个值将由ksize.width和ksize.height计算得出。
6.borderType(可选):
类型:int。
说明:边界处理方式。决定了图像边界外的像素如何推断。有默认值BORDER_DEFAULT,如果没有特殊需要,通常不需要更改。其他常见的选项包括cv2.BORDER_CONSTANT(填充0)、cv2.BORDER_REPLICATE(边缘复制)、cv2.BORDER_REFLECT(边缘反射)等。

在这里插入图片描述
3、边缘检测
函数原型

void cv::Canny(InputArray image, OutputArray edges, double lowThreshold, double highThreshold, int apertureSize=3, bool L2gradient=false)

参数详解

1.image:
类型:InputArray 输入图像,应该是单通道8位图像(灰度图)。
说明:待处理的源图像,需要先进行灰度化处理,因为Canny算法是在灰度图像上进行的。
2.edges:
类型:OutputArray 输出图像,与输入图像具有相同的尺寸和类型。
说明:边缘检测的结果图像,图像中的边缘将被高亮显示。
3.lowThreshold:
类型:double 第一个滞后性阈值(低阈值)。
说明:像素的梯度值如果低于此阈值,则被视为非边缘像素。此阈值的选择影响边缘检测的灵敏度。
4.highThreshold:
类型:double 第二个滞后性阈值(高阈值)。
说明:像素的梯度值如果高于此阈值,则被视为边缘像素。此阈值的选择影响边缘检测的准确性。高阈值通常是低阈值的2到3倍。
5.apertureSize(可选):
默认值:3
类型:int Sobel算子的孔径大小。
说明:用于计算图像梯度的Sobel算子的大小。较大的孔径可以提高边缘检测的准确性,但也会增加计算量。
6.L2gradient(可选):
默认值:false
类型:bool 计算图像梯度幅值的标识。
说明:当此参数为true时,使用更精确的欧几里得距离(L2范数)来计算梯度值;当为false时,使用简化的L1范数计算梯度值。使用L2范数可以获得更精确的梯度值,但计算量较大。

在这里插入图片描述
4、扩张边缘
函数原型

void cv::dilate(InputArray src, OutputArray dst,   
                InputArray kernel,   
                Point anchor=Point(-1,-1),   
                int iterations=1,   
                int borderType=BORDER_CONSTANT,   
                const Scalar& borderValue=morphologyDefaultBorderValue() );

参数详解

1.src:
类型:InputArray
描述:输入图像,可以是单通道或多通道的灰度图像或彩色图像。图像的通道数量可以是任意的,但深度(数据类型)必须是CV_8U、CV_16U、CV_16S、CV_32F或CV_64F中的一种。
2.dst:
类型:OutputArray
描述:输出图像,与源图像具有相同的大小和类型。膨胀操作的结果将存储在这个图像中。
3.kernel:
类型:InputArray
描述:膨胀核(结构元素),用于指定膨胀操作的形状和尺寸。核可以是自定义的,也可以使用getStructuringElement函数来生成。如果未指定(即传递Mat()),则默认使用一个3x3的矩形核。
4.anchor:
类型:Point
默认值:Point(-1,-1)
描述:锚点的位置,决定了结构元素在进行膨胀时的参考位置。默认情况下,锚点位于结构元素的中心。
5.iterations:
类型:int
默认值:1
描述:膨胀操作的迭代次数。每次迭代都会将边缘进一步扩张。
6.borderType:
类型:int
默认值:BORDER_CONSTANT
描述:像素外推方法,用于处理边界像素。不同的方法会影响边界像素的处理方式。
7.borderValue:
类型:const Scalar&
默认值:morphologyDefaultBorderValue()
描述:在边界像素外推时使用的值,仅当borderType=BORDER_CONSTANT时有效。

在这里插入图片描述
5、侵蚀边缘
函数原型

void cv::erode(InputArray src, OutputArray dst,   
               InputArray kernel,   
               Point anchor=Point(-1,-1),   
               int iterations=1,   
               int borderType=BORDER_CONSTANT,   
               const Scalar& borderValue=morphologyDefaultBorderValue() );

参数详解

1.src:
类型:InputArray
描述:输入图像,即源图像,可以是单通道或多通道的灰度图像或彩色图像。图像的通道数量可以是任意的,但深度(数据类型)必须是CV_8U、CV_16U、CV_16S、CV_32F或CV_64F中的一种。
2.dst:
类型:OutputArray
描述:输出图像,与源图像具有相同的大小和类型。腐蚀操作的结果将存储在这个图像中。
3.kernel:
类型:InputArray
描述:腐蚀核(结构元素),用于指定腐蚀操作的形状和尺寸。核可以是自定义的,也可以使用getStructuringElement函数来生成。如果未指定(即传递Mat()),则默认使用一个3x3的矩形核。
4.anchor:
类型:Point
默认值:Point(-1,-1)
描述:锚点的位置,决定了结构元素在进行腐蚀时的参考位置。默认情况下,锚点位于结构元素的中心。
5.iterations:
类型:int
默认值:1
描述:腐蚀操作的迭代次数。每次迭代都会进一步腐蚀图像中的高亮区域。
6.borderType:
类型:int
默认值:BORDER_CONSTANT
描述:像素外推方法,用于处理边界像素。不同的方法会影响边界像素的处理方式。
7.borderValue:
类型:const Scalar&
默认值:morphologyDefaultBorderValue()
描述:在边界像素外推时使用的值,仅当borderType=BORDER_CONSTANT时有效。

在这里插入图片描述
使用示例

#include<opencv2/imgcodecs.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/imgproc.hpp>
#include<iostream>

using namespace std;
using namespace cv;

/// <summary>
/// Basic Function
/// </summary>
//void main() {
//	string path = "Resources/test.png";
//	Mat img=imread(path);//matrix data type 由opencv引入来处理图像
//	Mat imgGray,imgBlur,imgCanny,imgDil,imgErode;
//
//	cvtColor(img, imgGray, COLOR_BGR2GRAY);//cvt是convert的缩写,将图像从一种颜色空间转换为另一种颜色空间。
//	GaussianBlur(imgGray, imgBlur,Size(7,7),5,0);//使用高斯滤波器模糊图像。该函数将源图像与指定的高斯核进行卷积,Size(7,7)是核大小,数字越大越模糊
//	Canny(imgBlur, imgCanny, 25, 75);//边缘检测,阈值1,2可调,目的:显示更多的边缘
//	
//	Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));//创建一个核,增加Size(只能是奇数)会扩张/侵蚀更多
//	dilate(imgCanny, imgDil, kernel);//扩张边缘(增加边缘厚度)
//	erode(imgDil, imgErode, kernel);//侵蚀边缘(减小边缘厚度)
//	imshow("Image", img);
//	imshow("Image Gray", imgGray);
//	imshow("Image Blur", imgBlur);
//	imshow("Image Canny", imgCanny);
//	imshow("Image Dilation", imgDil);
//	imshow("Image Erode", imgErode);
//	waitKey(0);//增加延时,0表示无穷
//}

标签:int,InputArray,笔记,像素,学习,opencv,图像,类型,CV
From: https://blog.csdn.net/weixin_42077660/article/details/141125568

相关文章

  • 【算法学习】排序算法汇总
    冒泡排序1、冒泡排序简介冒泡排序的英文BubbleSort,是一种最基础的交换排序。之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数组的一侧移动冒泡排序的原理:冒泡轮数:每一轮只能将该轮中最大的数排至最后面。即第一轮只能确定将末位上的数归位......
  • 【Linux学习】CentOS7配置
    1、CentOS设置打开终端快捷键应用程序(Applications)>系统工具(SystemTools)>设置(Settings)>设备(Devices)>Keyboard拉到页面最底下,点击加号添加快捷键设置快捷键名称、命令(/usr/bin/gnome-terminal)以及快捷键,然后点击Add即可2、设置CentOS终端打开的默认字体......
  • 【Linux学习】Ubuntu配置
    1、如何在Ubuntu18.04上面安装VMware-tools实现屏幕适配,以及文件拖拽、复制、粘贴功能先设置以下:此处一定要设置路径保证客户机隔离选项两个勾选将主机桌面文件夹设置为共享 点击VMware顶部菜单,“虚拟机”>“安装VMwareTools”,桌面会出现光盘图标“VMwareTools”......
  • 【算法学习】算法时间复杂度
    时间复杂度的计算时间复杂度简单计算(一层、两层、多层循环)相当于轨迹追踪法:设执行次数为k,按照循环条件阿布算法课学习链接01区别算法(Algorithm)和程序(Program)算法程序设计阶段实施阶段相关领域知识程序员任何语言、伪代码编程语言独立于硬件......
  • 【办公软件学习】解决在打开word时,出现 “word 在试图打开文件时遇到错误” 的问题
    1.问题描述:最近在网上查找期刊论文的模板时,发现从期刊官网下载下来的论文格式模板,在本地用word打开时,出现错误,情况如下2.解决办法关闭提示窗口,打开左上角的【文件】按钮点击【选项】按钮点击【信任中心】>>>>【信任中心设置】选择【受保护视图】选项卡,将右侧窗口中......
  • 【办公软件学习】如何交叉引用多个参考文献[x-x]
    参考文献第一步:点击交叉引用将[24]、[27]这两个文献插入。第二步:右键刚插入的文献序号,然后点击切换域代码第三步:在代码块中添加代码\#"[0"和\#"0]"第四步:右键刚编辑的代码块,并更新域。第五步:在[4547]之间添加-,之后按"ctrl"+"shift"+"+"改成上标形式     ......
  • 【办公软件学习】如何将Word格式转换为Markdown格式
    一键!将Word转换为Markdown参考链接1:https://zhuanlan.zhihu.com/p/30891168参考链接2:https://blog.csdn.net/qq15035899256/article/details/125547483参考链接3:https://word2md.com/方法一:Writage+Pandoc—双剑合璧!下载并安装Writage,下载地址:http://www.writage.c......
  • 《数据资产管理核心技术与应用》读书笔记-第三章:数据血缘
    《数据资产管理核心技术与应用》是清华大学出版社出版的一本图书,全书共分10章,第1章主要让读者认识数据资产,了解数据资产相关的基础概念,以及数据资产的发展情况。第2~8章主要介绍大数据时代数据资产管理所涉及的核心技术,内容包括元数据的采集与存储、数据血缘、数据质量、数据监控与......
  • Java基础-学习笔记08
    01类变量、类方法、main方法、代码块类变量(静态变量)类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。关于静态变量在内存中的存放地址,有两种说法,①认为静态变量......
  • HCL学习——交换机端口安全技术
    本篇记录学习HCL的笔记。【2023年】H3CNE认证网络工程师完整培训视频教程_上https://www.bilibili.com/video/BV1Dg411i7yM?p=22&spm_id_from=pageDriver&vd_source=ecbebcd4db8fad7f74c518d13e78b165 802.1x技术 如果随便拿台pc插到交换机上岂不是就能接入本公司网络呢,80......