opencv 的norm_5. openCV中常用函数学习

本文介绍了OpenCV中用于矩阵操作的函数,包括reshape用于改变矩阵形状,norm计算矩阵范数,normalize进行矩阵归一化,reduce实现矩阵的列求和、均值和最大值计算,以及repeat用于复制矩阵。这些函数在遥感影像处理等领域具有广泛应用。
摘要由CSDN通过智能技术生成

一、前言

经过两个星期的努力,一边学习,一边写代码,初步完成了毕业论文系统的界面和一些基本功能,主要包括: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); //将通道数变成列数,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 OpenCV `norm` 函数的源代码: ```cpp double norm(InputArray src1, int normType, InputArray mask) { return norm(src1, noArray(), normType, mask); } double norm(InputArray src1, InputArray src2, int normType, InputArray mask) { CV_INSTRUMENT_REGION() if (src1.empty() || (src2.needed() && src2.empty())) return 0; if (mask.needed() && mask.empty()) CV_Error(Error::StsBadMask, "The mask can't be empty"); normType &= NORM_TYPE_MASK; bool isRelative = (normType & NORM_RELATIVE) != 0; bool isDiff = (normType & NORM_DIFF) != 0; normType &= 7; if (isDiff && src2.empty()) CV_Error(Error::StsBadArg, "src2 is empty in case of NORM_DIFF norm type"); CV_Assert(mask.empty() || mask.type() == CV_8U); int depth1 = src1.depth(), depth2 = src2.depth(); int cn1 = src1.channels(), cn2 = src2.channels(); int type1 = src1.type(), type2 = src2.type(); if (depth1 == CV_32F || depth1 == CV_64F) { if (normType == NORM_INF) return normInf(src1, mask); if (normType == NORM_L1) return normL1(src1, mask); if (normType == NORM_L2SQR) return normL2Sqr(src1, mask); if (normType == NORM_L2 || normType == NORM_HAMMING || normType == NORM_HAMMING2) return normL2(src1, mask); if (normType == NORM_RELATIVE_L2SQR) return normRelativeL2Sqr(src1, src2, mask); if (normType == NORM_MINMAX) return normMinMax(src1, mask); } if (normType == NORM_INF) return normInf(src1, mask); if (normType == NORM_L1) return normL1(src1, mask); if (normType == NORM_L2SQR) return normL2Sqr(src1, mask); if (normType == NORM_L2 || normType == NORM_HAMMING || normType == NORM_HAMMING2) return normL2(src1, mask); if (normType == NORM_DIFF && depth1 == depth2 && cn1 == cn2) return normDiff(src1, src2, mask); if (normType == NORM_RELATIVE_L2SQR) return normRelativeL2Sqr(src1, src2, mask); if (normType == NORM_MINMAX) return normMinMax(src1, mask); CV_Error(Error::StsBadFlag, ""); return 0; } ``` 该函数根据 `normType` 参数的值来计算输入数组的范数。有多种不同的范数类型,例如 L1 范数,L2 范数,无穷范数等。 如果有第二个输入数组 `src2`,则 `norm` 函数将计算两个数组之间的范数。如果 `mask` 参数被指定,则只考虑掩码为非零的像素。 该函数的返回值为一个 `double` 类型的数值,代表输入数组的范数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值