文章目录
- 1. 堆栈和动态分配内存
- 2. 模版类语法
- 2.1 OpenCV中的模板结构
- 2.2 C++ template基本语法
- 3. 优化
- 3.1 OpenCV的cv::Mat类计算优化
- 3.1.1 cv::Mat VS numpy array
- 3.1.2 结论
- 3.2 Eigen库
- 3.2.1 简介
- 3.2.2 Eigen vs OpenCV::mat vs GLM
- 3.3 关于优化
- 4. STL,Boost和std
- 4.1 名词解释
- 4.2 更详细的说明
- 5. OpenCV中的异常类
- 6. OpenCV中的gemm
1. 堆栈和动态分配内存
图自: https://web.stanford.edu/class/cs231m/lectures/lecture-4-opencv.pdf
参考自: https://web.stanford.edu/class/cs231m/lectures/lecture-4-opencv.pdf
- 堆区(heap):存储程序员自己申请的内存空间
- 栈区(stack):存储程序运行时分配的局部变量
- 经常看到数据结构里统称堆栈为stack,不要搞混,翻译问题。
感谢栈和堆(Stack & Heap)
参考:
- 深入详解C/C++动态内存管理
- 什么是堆?什么是栈?他们之间有什么区别和联系?
- 堆栈与堆(Stack vs Heap):有什么区别?图文并茂拆解代码解析!
- 一文搞懂栈(stack)、堆(heap)、单片机裸机内存管理malloc
- 堆和栈的区别
- 栈和堆(Stack & Heap)
2. 模版类语法
2.1 OpenCV中的模板结构
像cv::Point_<>
这个类名称最后的下划线,这是一种常见但并不通用的表示模版的写法,
在OpenCV3.x版本中,在不需要特别说明的地方,下划线会被删除。
因此,cv::Point_<>
仍然有下划线是为了区别于cv::Point
(类),即:cv::Point2i,
而cv::Vec<>没有下划线,3.x版本已经不支持cv::Vec_<>了
可以看看:学习Opencv(蝴蝶书/C++)——3. OpenCV的数据类型中
2. 基础类型的目录中那些数据类型的名字,有些有下划线,有些没有
2.2 C++ template基本语法
TDO
等我复习完C++再来填坑
3. 优化
3.1 OpenCV的cv::Mat类计算优化
3.1.1 cv::Mat VS numpy array
之前总是听人说或者感觉C++比python快,刚好看到这个问题what is the Optimization of the c++ matrix calculation with opencv::Mat说,遇到了numpy
(计算优化过的python库)计算矩阵比OpenCV的mat算的快的情况。
刚好自己这里试验一下:用两个512*1024的矩阵相乘
#include <iostream>
#include <opencv2/opencv.hpp>
/*
测试一下矩阵运算C++和python的速度。
*/
int main(int argc, char **argv)
{cv::Mat time(512, 1024, CV_32F);cv::Mat time2