[cookbook笔记一] OpenCV库简述

2024-05-03 15:08
文章标签 opencv 笔记 简述 cookbook

本文主要是介绍[cookbook笔记一] OpenCV库简述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、简述opencv安装目录下的文件夹

opencv_core 核心功能,特别是基本的数据结构和数学函数

opencv_imgproc 主要的图像处理函数(滤波、模糊、缩放、直方图等)

opencv_highgui 图像和视频接口函数

opencv_features2d 特征点检测器和特征点匹配框架(SURF,FAST等

opencv_calib3d 摄像头标定函数、3D重建函数等

opencv_video 运动估计,特征追踪和前景提取函数(光流法,移动模板,背景消除)

opencv_objdetect 物体检测函数如人脸和行人检测器(haar&LBP人脸检测和识别)

opencv_ml 机器学习函数(SVM,决策树,级联分类器等)

opencv_flann 计算几何算法

opencv_legacy 废弃的代码

opencv_gpu GPU加速代码,但不是很稳定

opencv_contrib 最新贡献的但不是很成熟的库函数


二、VS中的解决方案和项目

一般而言,一个解决方案可以由多个项目组成,每一个项目又是相对独立的软件模块,例如:一个软件模块和一个库模块,这样解决方案内的项目可以共享文件和库。


三、VS中的Debug模式和Release模式

Debug模式可以帮助你创建和调试程序,它是一个更加受保护的环境,可能可以告诉你程序存在的某些问题,如内存泄漏和运行时检查函数是否正常运行,但是它产生的可执行文件运行可能较慢,这就是当程序准备好后为什么要用Release模式建立可执行文件的原因。注意到有可能在调试模式下运行良好的程序在Release模式下可能会报错,这时候需要继续追溯错误的根源。大多数的IDE都提供这两种编译模式。


四、VS中包含目录

最好使用环境变量的方式,因为不同的运行环境下opencv安装环境都不一样,使用环境变量可以有效的避免程序运行在他处时修改Property Sheets的窘境。使用方式为设定opencv包含目录为d:\Opencv2.6,这样可以将opencv目录表达成$(OPENCV2_DIR)\include和$(OPENCV2_DIR)\lib。


五、opencv基础知识笔记

·Mat image;//创建一个大小为0*0的矩阵,image中的data指针指向分配的内存,没有分配内存时初始化为0.

·对于Mat类型的对象,采用引用计数和浅复制的方式,所以直接用赋值语句是不能复制图像数据的,只会复制data指针,该指针指向数据区,如果想要复制数据的话可以采用clone成员函数和copyTo函数。

·引用计数的方式可以将数据区保存直到所有指向的数据区的引用析构。这样的话可以很方便的跨函数返回函数中的Mat指针。

例:

Mat func(){ima(240,320,CV_8U,Scalar(100));return ima;
}
int main()
{Mat gray = func();return 0;
}
这时在函数内分配的空间将会被gray变量所拥有,而无需开辟另外的存储空间,这就是引用计数带来的好处。事实上,return回来的是ima的浅复制版本,当ima局部变量生命周期结束,将会被回收。但由于引用计数不为0(又被gray变量拥有),因此分配的内存不会被释放。

此机制可能引发一些问题:

class Test {
// image attribute
cv::Mat ima;
public:
// constructor creating a gray-level image
Test() : ima(240,320,CV_8U,cv::Scalar(100)) {}
// method return a class attribute, not a good idea...
cv::Mat method() { return ima; }
};
如果返回ima的浅拷贝,后续对ima浅拷贝修改了将会变相修改ima成员变量的值(往往是非预期的),此时注意最好返回ima的深拷贝版本。

·imwrite("output.bmp",result);//文件扩展名决定了保存图片时使用的编码器

·C++版本的Mat和C版本的Iplimage之间可以很轻松的相互转换

例一、

IplImage* iplImage = cvLoadImage("c:\\img.jpg");
cv::Mat image4(iplImage,false);
注意到第二个变量设定为false指明不想得到图像数据区的拷贝(默认值),指明为true得到新的拷贝。这里可能出现的问题是迷途指针Iplimage*,因此更好的解决方案是使用Opencv2.0版本提供的安全指针Ptr template(据说是参考Boost库的相关技术),简单的说就是加入了一个引用计数和操作符重载,让需要手动release的指针自动Release方便内存管理。

cv::Ptr<IplImage> iplImage = cvLoadImage("c:\\img.jpg");
最后:尽量使用Mat吧。


这篇关于[cookbook笔记一] OpenCV库简述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/957032

相关文章

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

opencv 滚动条

参数介绍:createTrackbar( trackbarname , "hello" , &alpha_slider ,alpha_max ,  on_trackbar )  ;在标签中显示的文字(提示滑动条的用途) TrackbarName创建的滑动条要放置窗体的名字 “hello”滑动条的取值范围从 0 到 alpha_max (最小值只能为 zero).滑动后的值存放在

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个