一、前言

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

二、openCV函数

1 reshape

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

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

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

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

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

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

显示如下:

2 norm

 C++: double norm(InputArray src1, int normType=NORM_L2, InputArray mask=noArray())  // 计算矩阵src1的范数,主要包括1,2,inf范数 NORM_L1/NORM_L2/NORM_INF
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的相应范数之商
C++: double norm(const SparseMat& src, int normType)

参数:大家都知道

 int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); cv::Mat img = cv::imread("F:\\paperSystem\\openCV\\2.tif");
std::vector<cv::Mat>splitImg(img.channels());
cv::split(img,splitImg); cv::Mat tmp = img.reshape(,img.rows*img.cols); double norm1_splitImg = cv::norm(splitImg[],cv::NORM_L1);
double norm2_splitImg = cv::norm(splitImg[],cv::NORM_L2);
double normInf_splitImg = cv::norm(splitImg[],cv::NORM_INF); double norm1_img = cv::norm(img,cv::NORM_L1);
double norm2_img = cv::norm(img,cv::NORM_L2);
double normInf_img = cv::norm(img,cv::NORM_INF); double norm1_tmp = cv::norm(tmp,cv::NORM_L1);
double norm2_tmp = cv::norm(tmp,cv::NORM_L2);
double normInf_tmp = cv::norm(tmp,cv::NORM_INF); qDebug()<<norm1_splitImg<<" "<<norm1_img<<" "<<norm1_tmp;
qDebug()<<norm2_splitImg<<" "<<norm2_img<<" "<<norm2_tmp;
qDebug()<<normInf_splitImg<<" "<<normInf_img<<" "<<normInf_tmp;
return a.exec();
}

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

3 normalize

 C++: void normalize(InputArray src, OutputArray dst, double alpha=, double beta=, int norm_type=NORM_L2, int dtype=-, InputArray mask=noArray())
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[],tmp,,,cv::NORM_MINMAX);  // 关于这个函数我还不是很理解,将矩阵元素归一化到一个区间可以,可是为何将矩阵的某个范数归一化到一个值却一直不行

有知道的请帮忙。

4 reduce

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

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

参数:int dim:0  --- 行

int rtype:  CV_REDUCE_SUM   CV_REDUCE_AVG  CV_REDUCE_MAX  CV_REDUCE_MIN

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

5 repeat

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

这个代码和Matlab中的repmat一样

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

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

  1. OpenCV中 常用 函数 的作用

    1.CV_Assert函数作用: CV_Assert()若括号中的表达式值为false,则返回一个错误信息.

  2. OpenCV图像处理中常用函数汇总(1)

    //俗话说:好记性不如烂笔头 //用到opencv 中的函数时往往会一时记不起这个函数的具体参数怎么设置,故在此将常用函数做一汇总: Mat srcImage = imread("C:/Us ...

  3. numpy常用函数学习

    目录numpy常用函数学习点乘法线型预测线性拟合裁剪.压缩和累乘相关性多项式拟合提取符号数组杂项点乘法该方法为数学方法,但是在numpy使用的时候略坑.numpy的点乘为a.dot(b)或numpy. ...

  4. LoadRunner中常用函数参考手册

    基础篇1:LoadRunner中常用函数参考手册 常用函数列表 web_url web_submmit_form VS web_submmit_data VS web_custom_request w ...

  5. OpenCV中Camshitf算法学习(补充)

    结合OpenCV中Camshitf算法学习,做一些简单的补充,包括: 实现全自动跟随的一种方法 参考opencv中的相关demo,可以截取目标物体的图片,由此预先计算出其色彩投影图,用于实际的目标跟随 ...

  6. 深度学习(六)keras常用函数学习

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9769301.html Keras是什么? Keras:基于Theano和TensorFlow的 ...

  7. OpenCV中Camshitf算法学习

    今天上午,结合OpenCV自带的camshitf例程,简单的对camshitf有了一个大致的认识和理解,现总结如下: 1:关于HSV H指hue(色相).S指saturation(饱和度).V指val ...

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

    本文中枫竹梦介绍一些JavaScript中入门级的常用函数,对于已经过了入门的童鞋可选择略过,都是一些非常实用的函数.如果发现什么问题,欢迎讨论. 问题列表 Q1: 设计一个函数repeatIt(st ...

  9. OpenCV中phase函数计算方向场

    一.函数原型 ​该函数参数angleInDegrees默认为false,即弧度,当置为true时,则输出为角度. phase函数根据函数来计算角度,计算精度大约为0.3弧度,当x,y相等时,angle ...

随机推荐

  1. shell常用命令的用法

    1. 如何把 /etc/passwd 中用户uid 大于500 的行给打印出来?awk -F ':' '$3>500' /etc/passwd 2. awk中 NR,NF两个变量表示什么含义?N ...

  2. vsftp虚拟用户登录配置详解

    一.安装:1.安装Vsftpd服务:# yum install vsftpd 2.安装DB4部件包:这里要特别安装一个db4的包,用来支持文件数据库.# yum install db4-utils 二 ...

  3. RAID磁盘阵列原理

    磁盘阵列(Redundant Arrays of independent Disks,RAID),有“价格便宜具有冗余能力的磁盘阵列”之意.原理是利用数组方式来作磁盘组,配合数据分散排列的设计,提升数 ...

  4. unity针对iphone的屏幕旋转

    屏幕旋转可以在引擎里设置: 依次点开 Edit——Project Setting——Player 即可设置如图: 接下来的是 雨松大神的 代码控制,本屌是安卓机器,没能测试. C# using Uni ...

  5. (四)CodeMirror - API

    内容相关 cm.getValue() cm.setValue() cm.getRange() editor.getRange({line:1},{line:2}) // 获取内容块字符 cm.repl ...

  6. jQuery proxy详解

    第一次接触jQuery.proxy()时感觉这个方法不实用,不明白它到底是个什么意思.今天来将jQuery官网上的解释进行一下翻译,顺便添加自己的理解和一些示例.proxy也可称为代理. jQuery ...

  7. 用python随机生成数据,再插入到postgresql中

    用python随机生成学生姓名,三科成绩和班级数据,再插入到postgresql中. 模块用psycopg2 random import random import psycopg2 fname=[' ...

  8. SVN上传代码时代码失败

    Description : You are not authorized to access the files in the repository.Suggestion : You might be ...

  9. MVC入门之.Net语法学习

    本节中主要学习.Net框架性语法.开发者可以使用新语法提高编程的效率以及代码的运行效率:其本质都是“语法糖”,由编译器在编译时转成原始语法. u  自动属性 Auto-Implemented Prop ...

  10. Android 隐藏输入软键盘

    //隐藏输入键盘 ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)) .hideSoftInputFromWindow(BshTo ...