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

相关文章

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

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

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

【学习笔记】 陈强-机器学习-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).滑动后的值存放在

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

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的原因是这个