[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

相关文章

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

c/c++的opencv实现图片膨胀

《c/c++的opencv实现图片膨胀》图像膨胀是形态学操作,通过结构元素扩张亮区填充孔洞、连接断开部分、加粗物体,OpenCV的cv::dilate函数实现该操作,本文就来介绍一下opencv图片... 目录什么是图像膨胀?结构元素 (KerChina编程nel)OpenCV 中的 cv::dilate() 函

qtcreater配置opencv遇到的坑及实践记录

《qtcreater配置opencv遇到的坑及实践记录》我配置opencv不管是按照网上的教程还是deepseek发现都有些问题,下面是我的配置方法以及实践成功的心得,感兴趣的朋友跟随小编一起看看吧... 目录电脑环境下载环境变量配置qmake加入外部库测试配置我配置opencv不管是按照网上的教程还是de

python+OpenCV反投影图像的实现示例详解

《python+OpenCV反投影图像的实现示例详解》:本文主要介绍python+OpenCV反投影图像的实现示例详解,本文通过实例代码图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前言二、什么是反投影图像三、反投影图像的概念四、反向投影的工作原理一、利用反向投影backproj