【编程开发】opencv实现对Mat中某一列或某一行的元素进行normalization
【编程开发】opencv实现对Mat中某一列或某一行的元素进行normalization
标签: 【编程开发】 【机器学习】
声明:引用请注明出处http://blog.csdn.net/lg1259156776/
说明:在机器学习中,最常见的处理就是对输入的特征向量进行normalization,在opencv中就实现了normalize函数进行各种normalization,本文结合我的实际应用来进行说明。
代码实现
首先参看代码:
/*normalized*/
Mat dataCol;
for (int j=0; j<len; j++)
{
dataCol = FeatureValue.colRange(j,j+1).clone();
normalize(dataCol,dataCol);
for (int i=0; i<Num; i++)
{
FeatureValue.at<float>(i,j) = dataCol.at<float>(i,0);//log(abs(dataCol.at<float>(i,0)));
}
}
上面的一段代码实现的是对Mat中某一列元素进行normalization,实现的是L2范数的normalization。
Mat取行或列
首先opencv Mat中如何取出某一行或某几行,某一列或某几列呢?
Mat dataCol;
dataCol = FeatureValue.colRange(j,j+1).clone();
直接使用Mat类中成员函数,方法,colRange对应的是列,rowRange对应的是行,从第j列(下标从0开始)到第j列,也就是说只取出第j列而已。后面的clone表示深拷贝,不使用clone表示浅拷贝。
深拷贝与浅拷贝
浅拷贝的说明如下:
Mat B;
B = image // 第一种方式
Mat C(image); // 第二种方式
这两种方式称为浅copy,是由于它们有不同的矩阵头,但是它们共享内存空间,即指向一个矩阵。当图像矩阵发生变化时,两者相关联,都会变化。
深拷贝的说明如下:
Mat B,C;
B = image.clone(); // 第一种方式
image.copyTo(C); // 第二种方式
深拷贝是真正的copy了一个新的图像矩阵,此时image,B,C三者相互没有影响。
normalize函数说明
函数原型:
void normalize(InputArray src,OutputArray dst, double alpha=1, double beta=0, int norm_type=NORM_L2, int dtype=-1, InputArray mask=noArray() )
该函数归一化输入数组使它的范数或者数值范围在一定的范围内。
Parameters的说明如下:
- src:输入数组
- dst:输出数组,支持原地运算,inplace操作
- alpha:range normalization模式的最小值
- beta:range normalization模式的最大值,不用于norm normalization(范数归一化)模式。
- normType:归一化的类型,可以有以下的取值:
NORM_MINMAX:数组的数值被平移或缩放到一个指定的范围,线性归一化,一般较常用。
NORM_INF: 此类型的定义没有查到,根据OpenCV 1的对应项,可能是归一化数组的C-范数(绝对值的最大值)
NORM_L1 : 归一化数组的L1-范数(绝对值的和)
NORM_L2: 归一化数组的(欧几里德)L2-范数
可能最常见的要数NORM_L2和NORM_MINMAX。
- dtype:dtype为负数时,输出数组的type与输入数组的type相同;否则,输出数组与输入数组只是通道数相同,而tpye=CV_MAT_DEPTH(dtype).
- mask:操作掩膜,用于指示函数是否仅仅对指定的元素进行操作。
1、线性函数转换,表达式如下:(对应NORM_MINMAX)
ifmask(i,j)!=0
dst(i,j)=(src(i,j)-min(src))*(b‘-a‘)/(max(src)-min(src))+ a‘
else
dst(i,j)=src(i,j)
其中b‘=MAX(a,b), a‘=MIN(a,b);
当norm_type!=CV_MINMAX:
ifmask(i,j)!=0
dst(i,j)=src(i,j)*a/norm (src,norm_type,mask)
else
dst(i,j)=src(i,j)
其中,函数norm的功能是计算norm(范数)的绝对值
Thefunctions norm calculate an absolute norm of src1 (when there is no src2 ):
2015-11-06 调试记录 张朋艺
【编程开发】opencv实现对Mat中某一列或某一行的元素进行normalization的更多相关文章
- 【编程开发】 C与C++中的关于函数指针的强制类型转换与指针函数的关系
[编程开发] C与C++中的关于函数指针的强制类型转换与指针函数的关系 标签: [编程开发] [VS开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 以 ...
- 【OpenCV】访问Mat中的每个像素值
其中注意i,j的位置,写错了好几次.第二个for循环中的if语句用异或来判断图像中哪些像素点发生了改变.
- 利用SMB jcifs实现对windows中的共享文件夹的操作
需求是在本地上传文件到服务器上,服务器是windows的,使用共享文件夹提供权限给你的. 利用第三方: CIFS (Common Internet File System) SMB(Server Me ...
- ddr3调试经验分享(一)——modelsim实现对vivado中的MIG ddr3的仿真
Vivado中的MIG已经集成了modelsim仿真环境,是不是所有IP 都有这个福利呢,不知道哦,没空去验证. 第一步:使用vivado中的MIG IP生成一堆东西 ,这个过程自己百度.或者是ug5 ...
- 基于TerraExplorer Pro 6.1 实现对Shape中Feature对象拾取查询
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Python利用Plotly实现对MySQL中的数据可视化
Mysql表数据: demo.sql内容 create table demo( id int ,product varchar(50) ,price decimal(18,2) ,quantity i ...
- 【aardio】如何对listview中某一列,某一行的特定值进行修改?
用表格创建数组来实现. import win.ui; /*DSG{{*/ var winform = ..win.form( bottom=399;parent=...;right=599;text= ...
- 【Struts2学习笔记(11)】对action的输入校验和XML配置方式实现对action的全部方法进行输入校验
在struts2中,我们能够实现对action的全部方法进行校验或者对action的指定方法进行校验. 对于输入校验struts2提供了两种实现方法: 1. 採用手工编写代码实现. 2. 基于XML配 ...
- opencv-访问Mat中每个像素的值
参考:[OpenCV]访问Mat中每个像素的值(新) 膜拜大佬 以下例子代码均针对8位单通道灰度图. 1 .ptr和[]操作符 Mat最直接的访问方法是通过.ptr<>函数得到一行的指 ...
随机推荐
- [Google Guava] 4-函数式编程
原文链接 译文链接 译者:沈义扬,校对:丁一 注意事项 截至JDK7,Java中也只能通过笨拙冗长的匿名类来达到近似函数式编程的效果.预计JDK8中会有所改变,但Guava现在就想给JDK5以上用户提 ...
- yii行为和过滤器
行为是对类的功能进行了扩展,针对开闭原则,为了类的扩展而生,不去修改类原有的代码. yii的行为需要继承yii\base\Behavior,这就好比你要给人安装一个胳膊,这个胳膊得是人的,而不能是老虎 ...
- MySQL8 设置大小写 正确步骤
在安装完成之后,初始化数据库之前,修改 my.cnf 打开mysql配置文件vim /etc/my.cnf 在尾部追加一行lower_case_table_names=1并保存,然后再初始化数据库. ...
- pyinstaller打包程序包含openpyxl库问题解决
带有openpyxl库时,直接打包,总会失败: 原因:看本地文件...Anaconda3\Lib\site-packages\PyInstaller\hooks\hook-openpyxl.py 发现 ...
- 解决InputStream中数据读取不完整问题
转载:https://blog.csdn.net/lilidejing/article/details/37913627 当需要用到InputStream获取数据时,这时就需要读取InputStrea ...
- MySQL5.7 (审计)通过init_connect + binlog 实现MySQL审计功能
转载自:https://blog.51cto.com/13941177/2173620 一.简介 1.概述 mysql本身已经提供了详细的sql执行记录–general log ,但是开启它有以下几个 ...
- 畅通工程续(HDU 1874)(简单最短路)
某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让行人很困扰. 现在 ...
- vue中mixin的理解与用法
vue中提供了一种混合机制--mixins,用来更高效的实现组件内容的复用.最开始我一度认为这个和组件好像没啥区别..后来发现错了.下面我们来看看mixins和普通情况下引入组件有什么区别? 组件在引 ...
- 利用chrome devtool 观察页面占用内存
推荐阅读:解决内存问题 1. 任务管理器 我们看看下面这幅图: 内存占用空间:原生内存,Dom节点就是存在原生内存里面的. Javascript使用的内存:代表JS堆内存,我们只需要关心括号里面的值( ...
- vue 路由跳转记住当前页面位置
从列表页面跳去详情页面, 在列表页面的生命周期:deactivated 中把当前的scrollTop位置存下来,可以存在localstorage中,也可以存在vuex中, 从详情页面返回列表页面:a ...