文章标题

本文介绍了OpenCV的基本概念,包括它是一个开源计算机视觉库,核心功能模块,如core、imgproc等。重点讨论了OpenCV的头文件使用,特别是opencv.hpp,以及Mat对象的创建和特性。还详细讲解了OpenCV中的数据结构,如点、尺寸、矩形类,并介绍了常用函数,如颜色空间转换和图像绘制函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2017.08.23-8.25 OpenCV8.25
前四章
#OpenCV概述
open source computer vision library开源计算机视觉库,由一系列C函数和C++类构成。采用C/C++语言进行开发使用,提供了和MATLAB的接口
就是一个SDK软件开发工具包(software development Kit),
自动生成的opencv文档:
图像中的物体分析、物体识别。

OpenCV中的所有模块,用到的有:
core:核心功能模块,包含:基本数据结构、动态数据结构、绘图函数、数组操作相关函数等。

imgproc:图像处理模块,滤波、几何变换、图像转换、直方图相关、结构分析和形状描述、运动分析和对象跟踪、特征检测、目标检测等。

features2d:2D功能框架,特征检测和描述、特征检测器通用接口、描述符提取器通用接口、描述符匹配器通用接口、关键点绘制函数和匹配功能绘制函数。

highgui:图像用户界面GUI graphic user interface,包括媒体输入输出、视频捕捉、图形交互界面接口。

ML:机器学习模块,SVM support vector machines

objdetect:目标检测模块,级联分类和latent SVM两部分。

opencv_contrib:脸部识别、文本探测、新的边缘检测器、新的光流和追踪算法等。

OpenCV头文件认知

opencv.hpp已经包含了OpenCV的各模块的头文件。所以编写模块core、imgproc、features2d、highgui、ML等应用程序时,原则上只写一句

include <opencv2/opencv.hpp>

即可,精简代码。但是学习过程中不这样啦,还是包含了相应模块的头文件。

OpenCV数据结构与基本绘图

显示创建Mat对象

采用MATLAB式的初始化方法:

//理解:创建一个mat类的对象,调用该类的成员函数  对角矩阵
 Mat E=Mat::Eye(4,4,CV_64F);
cout<<"E="<<endl<<" "<<E<<endl;
//全1矩阵
Mat E=Mat::Ones(2,2,CV_32F);
cout<<"O="<<endl<<" "<<O<<endl;
//全0矩阵
Mat E=Mat::Zeros(3,3,CV_8UC1);
cout<<"Z="<<endl<<" "<<Z<<endl;

基础图像容器mat

Mat类特点:不必手动开辟空间;不必不用时释放空间。像matlab一样很方便。

opencv中函数输出图像的内存分配自动完成
无需考虑内存释放问题
赋值运算符 =构造函数 copy create复制信息头,不管矩阵像素值的复制,也就是说只管指针即可;
使用clone()或者copyto()复制图像矩阵像素。

组成矩阵头(大小、存储方法、存储地址等信息)和指针(指向存储像素矩阵的地址)。大图像复制很浪费空间和时间资源,采用引用计数机制,即:不同信息头可共享一个矩阵(采用让矩阵指针指向同一个地址)。
拷贝构造函数只复制信息头和矩阵指针,不复制矩阵。
可以创建只引用部分数据即ROI区域信息头

Mat D(A,Rect(10,10,100,100))//使用矩形界定
Mat D=A(Range:all(),Range(1,3));//行和列界定

常用数据结构

opencv里面定义了很多类(包括相应成员和成员函数),可以直接用的。有 point类、Scalar()类、Size类、Rect类、等等。

点 point类 :Point[int]、Point2i 、Point等价
颜色 Scalar()类:
尺寸 Size_[int]、Size2i、Size等价 Size(5,5)
矩形Rect类:
(1)其成员变量有x,y,width,sidth,分别为左上点坐标 宽高
(2)其成员函数有:
Size() 返回尺寸
area() 返回面积
contains(Point) 返回“点是否在矩形内部”的判断结果
inside(Rect) 返回“矩形是否在另一矩形内部”的判断结果
tl()— top left 返回左上点坐标
br()–=bottom right 返回右下点坐标

求两个矩形的交集和并集:Rect rect=rect1&rect2 ;Rect rect=rect1|rect 2

矩形的平移和缩放:Rect rectShift=rect+point ;Rect rectScale=rect+size

常用函数

颜色空间转换函数:cvtColor() convert转换
RGB空间、HSI空间、HSV空间、灰度图像的转换。
举例如下:
debug时的错误:源文件未加到项目里去

#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace cv;

void main()
{
    //定义两个mat类对象;
   Mat srcImage=imread("1.jpg",1),dstImage;//正数表示三通道彩色,0灰度图,负包含某通道的加载图像;
   cvtColor(srcImage,dstImage,CV_RGB2GRAY);//转换为灰度图
   imshow("灰度图",dstImage);
   waitKey();//6s后自动关闭
}

其他常用知识点

Range类使得opencv更像MATLAB;

math.h>包含有:
计算向量角度函数fastAtan2、
计算立方根函数cubeRoot、
向上取整函数cvCeil、
向下取整函数cvFloor、
四舍五入函数CVRound、
判断是否无穷大cvIsInf、
判断是否是个数cvIsNaN。

显示文字函数:
getTextSize()
putText()
cvInitFont()

做图相关函数:
circle圆
clipLine
elipes椭圆
elipes2Poly
line直线
rectangle矩形

基本图像绘制

一个完整的绘图函数的例子:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值