opencv多通道数据和多维数据的区别
来源:互联网 发布:淘宝的降价通知 编辑:程序博客网 时间:2024/06/01 20:12
opencv中经常要用到多通道矩阵来处理彩色图像,同时多维度的矩阵在opencv中也会经常遇到,这里对这两种数据结构做一个对比。总体来说,对这两种数据结构opencv在处理上是不同的,主要是数据的存储安排上不同。多通道数据仍然是按照二维数据的方式来存放数据,不过于正常的二维矩阵相比较,单个元素包含了多个数据值如B、G、R。而多维矩阵是多个层级的二维矩阵组合而成。下面是一些细节对比,和该结论的依据。
opencv中多维数据的申请:
int sz[]={3,2,2};
Mat dm(3,sz,CV_8U,Scalar(0));
这样申请得到3*2*2的矩阵,并初始化为0。这里3是第0维,是层的概念,2*2是二维空间中的平面概念。
这一点可以由dm.step[0]=4, dm.step[1]=2,dm.step[0]=1得到验证。这里的保存数据是按照行存储,然后按列,最后按层。
dm(k,i,j)=pdm=dm.data+dm.step[0]*k+dm.step[1]*i+dm.step[2]*j;其中k是层数,i是行数,j是列数
opencv中多通道数据的申请:
Mat d(2,2,CV_8UC3,Scalar(0));
这里得到的仍然是一个二维矩阵,每个元素由3个值构成如B,G,R。这里保存数据先保存每个元素的3个子值,然后按行排列元素,再按照行保存。这点和多维矩阵不同。
这一点可以由d.step[0]=6,d.step[1]=3,,d.step[2]没有意义,得到验证。
这里可以按照指针方式对矩阵元素进行访问,也可以以模板类Mat_进行访问或者利用split函数分离出B、G、R三个分量矩阵按照二维方式进行处理。
指针方式:
B=dm.data+dm.step[0]*i+dm.step[1]*j+0;
B=dm.data+dm.step[0]*i+dm.step[1]*j+1;
B=dm.data+dm.step[0]*i+dm.step[1]*j+2;
模板类Mat_方式:
Mat_<Vec3b>d_=d;
d_(0,0)便表示多通道矩阵中第一个元素的3个B、G、R分量值,它是Vec3b类型的数据,d_(0,0)[0]、d_(0,0)[1]、d_(0,0)[2]、分别访问B、G、R的值。
split函数转化为B、G、R3个二维矩阵:
vector<Mat>m_ch;
split(d,m_ch);
这样m_ch[0]、m_ch[1]、m_ch[2]、分别表示B、G、R的分量矩阵。
- opencv多通道数据和多维数据的区别
- opencv中Mat类型数据的索引修改和多通道数据提
- OPENCV 4. 矩阵维度、通道和数据访问
- opencv里面Mat元素数据的深度和通道的理解
- OpenCV学习——一个多维数组(矩阵)和一个一维,但是包含高维数据的数组之间的区别
- opencv各通道像素坐标数据的存取
- 多维数据的LINQ
- opencv Mat 多通道 数据读取或赋值
- OpenCV学习笔记(二十一)---三通道和四通道之间的区别
- 基于ARM的多通道数据采集
- gnugk代码解读之三:媒体通道数据和媒体控制通道数据的路由
- 数据通道
- OLAP的多维数据分析
- 多维数据库的数据存储
- 【openCV】多通道的拆分
- stm32adc多通道数据采集
- stm32adc多通道数据采集
- tcp文件双通道传输 命令通道和数据通道的关联
- ubuntu 正确安装jdk后,eclipse从快捷方式打开找不到jvm
- 消息队列RabbitMQ和ActiveMQ的生产者流量控制
- DELPHI ClientData使用详解
- 已知String类的定义,实现其函数体
- exVim + Tagbar + winmanager 环境搭建
- opencv多通道数据和多维数据的区别
- c语言函数指针的理解与使用
- js如何查看元素类型
- 漫谈网络编程中的容错处理
- Girls' research(已完善的Manacher算法模板:输出最长回文子串)
- 创建要素的两种方法(多要素)
- java TCP/UDP编程
- 深度学习(卷积神经网络)一些问题总结
- C++ 内存对齐