OpenCV笔记(五)CvMat结构体初解2

2024-08-21 15:18

本文主要是介绍OpenCV笔记(五)CvMat结构体初解2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这一节学习矩阵的维度和通道的含义和概念。

一、对维度和通道的理解:

例(用cvGetReal2D或cvGet2D函数):二维矩阵。

单通道:float value = (float)cvGetReal2D(&mat, y, x);// mat:CvMat型结构体,y:行,x:列,函数返回值为double型,返回坐标为(y,x)的值;

多通道:CvScalar vlaue = cvGet2D(&mat, y, x); //mat:CvMat型结构体,y:行,x:列,函数返回值为CvScalar型(第三篇中介绍的结构体类型,成员为val[4]);

下面贴出通道数为2时的源码,该程序遍历输出矩阵中的值:

#include "stdafx.h"
#include "cxtypes.h"
#include "highgui.h"int main(int argc, char* argv[])
{CvMat mat;float data[12]={1, 2, 3, 4,5, 6, 7, 8,9,10,11,12};/*初始化mat,其中,若通道数为2,则type类型为:CV_<8|16|..><F|U|..>C2,其中cols处值应为:数组的列数除以2,因为双通道中,两个值为一组。*/cvInitMatHeader(&mat, 3, 2, CV_32FC2, data);for(int y = 0; y < mat.rows; y++){for(int x = 0; x < mat.cols; x++){CvScalar value = cvGet2D(&mat, y, x);//结构体value中的成员:val[4]:B、G、R、alpha;printf(" (%.2f %.2f) ", value.val[0], value.val[1]);	}printf("\n");}return 0;
}

通道:如上源码中,CV_32FC2中,“C”后面的“2”即为通道数,如何简单地理解通道呢?比如通道数为3,则data(float类型)中的三个数为一组,构成一个单元m,所形成的以m为单元的矩阵可以拆分成3个以float类型的数为单元的矩阵。比如对于二维矩阵来说,按此思想,由原来的data矩阵(定义为2行m列, 因为通道数为3,所以m = (12/2)/3=2,即data应为2行2列。 )划分为:{1,4,7,10},{2,5,8,11},{3,6,9,12};3个2行2列的矩阵。

维度:维度的最直观体现就是坐标的个数,比如3维,就有z,x,y三个坐标。(注意:如果要定义大于2维的结构体,要用CvMatND。)


Ps:更高效快速地读取矩阵信息:使用cvGet2D等函数的原理是栈,如果图片比较大,数以百万计的栈操作会使程序的效率变低,那么如何提高效率呢?

额,就是用指针啦~下一节我们再来学习~


这篇关于OpenCV笔记(五)CvMat结构体初解2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录

SpringBoot利用树形结构优化查询速度

《SpringBoot利用树形结构优化查询速度》这篇文章主要为大家详细介绍了SpringBoot利用树形结构优化查询速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一个真实的性能灾难传统方案为什么这么慢N+1查询灾难性能测试数据对比核心解决方案:一次查询 + O(n)算法解决

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2

在Java中使用OpenCV实践

《在Java中使用OpenCV实践》用户分享了在Java项目中集成OpenCV4.10.0的实践经验,涵盖库简介、Windows安装、依赖配置及灰度图测试,强调其在图像处理领域的多功能性,并计划后续探... 目录前言一 、OpenCV1.简介2.下载与安装3.目录说明二、在Java项目中使用三 、测试1.测

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho