5. openCV中常用函数学习

一、前言

经过两个星期的努力,一边学习,一边写代码,初步完成的毕业论文系统的界面和一些基本功能,主要包括:1 数据的读写和显示,及相关的基本操作(放大、缩小和移动);2 样本数据的选择;3 数据归一化处理;4 绘制光谱曲线;5 获取波段信息。接下来的工作主要是完成遥感影像分类的相关算法。这部分主要是数学计算,尤其是矩阵的相关运算和操作。为此,系统的学习和了解了openCV库中常用的矩阵操作函数,记录下来,方便以后查阅。

二、openCV函数

1 reshape

1 C++: Mat Mat::reshape(int cn, int rows=0) const

官方解释:能够改变二维数组的通道和形式,并且并不拷贝数据(只是创建矩阵的信息头)。

参数:int cn : 变换后通道数(0表示保持原通道数);

int rows : 变换后行数(0表示行数不变),列数更具以上两个参数自动确定。

对于遥感影像来说,我们常常将通道数据(波段数据)作为特征用作后续数据的处理,为此,我们总希望将通道数变为行或列数,对此我们可以使用如下的方法:

 1 int main(int argc, char *argv[])
 2 {
 3     QCoreApplication a(argc, argv);
 4
 5     cv::Mat img = cv::imread("F:\\paperSystem\\openCV\\2.tif");
 6     cv::Mat tmpB;
 7     tmpB = img.reshape(1,img.rows*img.cols); // 将通道数变成列数,每一行可表示每一个样本数据
 8     qDebug()<<img.channels()<<tmpB.cols;  //  通道个数
 9     qDebug()<<img.at<cv::Vec3b>(0,0)[0]<<tmpB.at<uchar>(0,0);
10     qDebug()<<img.at<cv::Vec3b>(0,0)[1]<<tmpB.at<uchar>(0,1);
11     qDebug()<<img.at<cv::Vec3b>(0,0)[2]<<tmpB.at<uchar>(0,2);
12     return a.exec();
13 }

显示如下:

2 norm

1 C++: double norm(InputArray src1, int normType=NORM_L2, InputArray mask=noArray())  // 计算矩阵src1的范数,主要包括1,2,inf范数 NORM_L1/NORM_L2/NORM_INF2 C++: double norm(InputArray src1, InputArray src2, int normType=NORM_L2, InputArray mask=noArray()) // 计算矩阵(src1-src2)的1、2、inf范数  NORM_L1/NORM_L2/NORM_INF   (对于normType = NORM_RELATIVE_INF/NORM_RELATIVE_L1/NORM_RELATIVE_L2,则计算(src1-src2)的范数与src1的相应范数之商3 C++: double norm(const SparseMat& src, int normType)

参数:大家都知道

 1 int main(int argc, char *argv[])
 2 {
 3     QCoreApplication a(argc, argv);
 4
 5     cv::Mat img = cv::imread("F:\\paperSystem\\openCV\\2.tif");
 6     std::vector<cv::Mat>splitImg(img.channels());
 7     cv::split(img,splitImg);
 8
 9     cv::Mat tmp = img.reshape(1,img.rows*img.cols);
10
11     double norm1_splitImg = cv::norm(splitImg[0],cv::NORM_L1);
12     double norm2_splitImg = cv::norm(splitImg[0],cv::NORM_L2);
13     double normInf_splitImg = cv::norm(splitImg[0],cv::NORM_INF);
14
15     double norm1_img = cv::norm(img,cv::NORM_L1);
16     double norm2_img = cv::norm(img,cv::NORM_L2);
17     double normInf_img = cv::norm(img,cv::NORM_INF);
18
19     double norm1_tmp = cv::norm(tmp,cv::NORM_L1);
20     double norm2_tmp = cv::norm(tmp,cv::NORM_L2);
21     double normInf_tmp = cv::norm(tmp,cv::NORM_INF);
22
23     qDebug()<<norm1_splitImg<<"  "<<norm1_img<<"  "<<norm1_tmp;
24     qDebug()<<norm2_splitImg<<"  "<<norm2_img<<"  "<<norm2_tmp;
25     qDebug()<<normInf_splitImg<<"  "<<normInf_img<<"  "<<normInf_tmp;
26     return a.exec();
27 }

显示如下:对于多通道数据是变成单通道后处理的,全部通道数据都加入计算。

3 normalize

1 C++: void normalize(InputArray src, OutputArray dst, double alpha=1, double beta=0, int norm_type=NORM_L2, int dtype=-1, InputArray mask=noArray())
2 C++: void normalize(const SparseMat& src, SparseMat& dst, double alpha, int normType)

参数: InputArray src:输入的矩阵;

OutputArray dst:输出矩阵;

double alpha:将矩阵规则化到aipha,或者是规则化后矩阵的最小值;

double beta:矩阵元素规则化的上界;当前面alpha规则化到某个值时,不使用

。。。。。。。

cv::normalize(splitImg[0],tmp,0,255,cv::NORM_MINMAX);  // 关于这个函数我还不是很理解,将矩阵元素归一化到一个区间可以,可是为何将矩阵的某个范数归一化到一个值却一直不行

有知道的请帮忙。

4 reduce

1 C++: void reduce(InputArray src, OutputArray dst, int dim, int rtype, int dtype=-1 )

这个函数功能很强大,可以实现矩阵的列求和、均值、最大、最小。

参数:int dim:0  --- 行

int rtype:  CV_REDUCE_SUM   CV_REDUCE_AVG  CV_REDUCE_MAX  CV_REDUCE_MIN

int dtypr:默认为原始数据的类型,注意:对于求和和均值之类要改变数据类型,尤其是求和,不然数据大小超过原始数据类型会报错

5 repeat

1 C++: void repeat(InputArray src, int ny, int nx, OutputArray dst)
2 C++: Mat repeat(const Mat& src, int ny, int nx)

这个代码和Matlab中的repmat一样

总结:openCV几乎具有MatLab中相似的矩阵操作函数,看来接下来将MatLab的代码转化为opencCV格式不是那么难  哈哈。。。

时间: 2024-07-31 18:59:41

5. openCV中常用函数学习的相关文章

Opencv+Python(3):在Opencv中绘制函数

在OpenCV中绘制函数 目标 学习使用OpenCV绘制不同的几何形状 你将学习这些函数:cv2.line(),cv2.circle(),cv2.rectangle(),cv2.ellipse(),cv2.putText()等 码 在所有上述功能中,您将看到如下所示的一些常见参数: img:想要绘制形状的图像 颜色:形状的颜色.对于BGR,将它作为元组传递,例如:(255,0,0)for blue.对于灰度,只需传递标量值即可. 厚度:线或圆的厚度等.如果像圆圈这样的闭合数字传递-1,它将填充形

LoadRunner中常用函数参考手册

基础篇1:LoadRunner中常用函数参考手册 常用函数列表 web_url web_submmit_form VS web_submmit_data VS web_custom_request web_custom_request web_concurrent_start(NULL); web_concurrent_end(NULL); ============================分割线================================ 1. web_url Loa

深度学习(六)基Tensorflow、Theano的keras常用函数学习

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9769301.html Keras是什么? Keras:基于Theano和TensorFlow的深度学习库 Keras是一个高层神经网络API,Keras由纯Python编写而成并基Tensorflow.Theano以及CNTK后端.Keras 为支持快速实验而生,能够把你的idea迅速转换为结果,如果你有如下需求,请选择Keras: 简易和快速的原型设计(keras具有高度模块化,极简,和可

javascript中常用函数汇总

js中函数很多,在实际项目开发中,函数的应用可以很大程度上简化我们的代码,所以在此记下开发中js中常用的函数,增强记忆. 1.isNaN(X):函数用于检查其参数是否是非数字值. 如果 x 是特殊的非数字值 NaN(或者能被转换为这样的值),返回的值就是 true.如果 x 是其他值,则返回 false.(是非数字值则为true,是数字则返回false) isNaN() 函数通常用于检测 parseFloat() 和 parseInt() 的结果,以判断它们表示的是否是合法的数字.当然也可以用

PHP基本常用函数学习

array_change_key_case — 返回字符串键名全为小写或大写的数组array_chunk — 将一个数组分割成多个array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值array_count_values — 统计数组中所有的值出现的次数array_diff_assoc — 带索引检查计算数组的差集array_diff_key — 使用键名比较计算数组的差集array_diff_uassoc — 用用户提供的回调函数做索引检查来计算数组的差

JavaScript中常用函数(入门级)(持续更新)

本文中枫竹梦介绍一些JavaScript中入门级的常用函数,对于已经过了入门的童鞋可选择略过,都是一些非常实用的函数.如果发现什么问题,欢迎讨论. 问题列表 Q1: 设计一个函数repeatIt(str, n),输入一个字符串str和一个整数n,返回n个str组成的字符串,如果str不是字符串则返回"Not a stirng".如,repeatIt("furzoom", 2),则返回"furzoomfurzoom".前往A1. Q2: 设计一个函

Opencv中直方图函数calcHist

calcHist函数在Opencv中是极难理解的一个函数,一方面是参数说明晦涩难懂,另一方面,说明书给出的实例也不足以令人完全搞清楚该函数的使用方式.最难理解的是第6,7,8个参数dims.histSize和ranges.以前一直都是想当然认为,该函数可以一次统计多张图片每个通道的灰度值数据,实际上calcHist函数一次只能统计一个通道上的直方图.我估计许多同学都犯过和我类似的错误,认为第5个参数hist,可以根据dims设定维度,比如dims=3,则输出的hist的维度就是3,并且会想当然的

小贞贞关于jmeter中常用函数_uuid、_random、_time、_p或_property、csv_read介绍

jmeter常用函数介绍: 常用的几个函数有_uuid._random._time._p或_property.csv_read . _uuid会生成一个随机唯一的id,比如在避免java请求重发造成未处理数据太多的情况,接口请求可加一个唯一的请求id唯一的响应id进行一一对应: 随机数_random,可以在你指定的一个范围里取随机值: 取当前时间_time,一些时间类的入参可以使用,如{__time(,)} 是生成精确到毫秒的时间戳.{__time(/1000,)}是生成精确到秒的时间戳.${_

Sql Server中常用函数replicate

SQL常用函数之三 REPLICATE () 按指定次数重复字符表达式. 语法 REPLICATE ( character_expression, integer_expression) 参数 character_expression 字符数据型的字母数字表达式,或者可以隐式转换为 nvarchar 或 ntext 的其他数据类型的字母数字表达式. integer_expression 可以隐式转换为 int 的表达式.如果 integer_expression 为负,将返回空字符串. 返回值