OpenCV中Mat的列向量归一化

时间:2022-01-20 19:31:51

OpenCV中Mat的列向量归一化

http://blog.csdn.net/shaoxiaohu1/article/details/8287528

2012-12-12 17:32 4907人阅读 评论(2) 收藏 举报
OpenCV中Mat的列向量归一化 分类:
图像与OpenCV(15) OpenCV中Mat的列向量归一化 VC++(13) OpenCV中Mat的列向量归一化

版权声明:本文为shaoxiaohu原创文章,欢迎转载,请注明出处,谢谢。

OpenCV 中虽然有normalize这个函数,但是却没有Matlab中normc这样只对Matlab中各列向量的归一化函数。好在我们可以多写几段代码来实现这种功能。

代码如下:

  1. double a[6] = {1, 2, 3, 4, 5, 6};
  2. Mat aa(2, 3, CV_64F, a);
  3. Mat temp1, temp2, temp3;
  4. pow(aa, 2, temp1);
  5. reduce(temp1, temp2, 0, CV_REDUCE_SUM); // calculate sum of each col
  6. sqrt(temp2, temp2);
  7. repeat(temp2, aa.rows, 1, temp3);
  8. divide(aa, temp3, aa);

其中 reduce函数是将计算各列向量的元素之和,相当于Matlab中的sum;repeat 函数是将temp2扩展为与aa相同大小的矩阵,相当于Matlab中的repmat。

实现各行向量的归一化,是同样的道理。

PS: OpenCV函数中,声明 src 与 dst 的变量要尽可能地不同,除了那些进行点计算的函数(如 add, divide,normalize等,这是我暂时得到的结论),在其它函数中如果src与dst变量名相同,得到的结果很有可能是错误的

OpenCV还有很多不太清楚的地方,欢迎各位的指点和讨论。