求openCV求点乘在求和的较快的算法
即CvMat * c1, CvMat * c2
数组维数相同
对应位置做乘法 然后得出求和
- C/C++ code
inline double SumScalarMultip(CvMat * s1, CvMat * s2){ double sum = 0.0; for (int i = 0; i < s1->rows; i++) { for (int j = 0; j < s1->cols; j++) { sum += cvmGet(s1, i, j) * cvmGet(s2, i, j); } } return sum;}
我是这样写的但是速度很慢,比matlab下还慢
opencv有没有什么自带的函数
[解决办法]
不应该很慢的。
可以这样,对s1调用两次cvReduce(),先cvReduce(s1, CvArr* dst1, 0, CV_REDUCE_SUM);
再调用一次cvReduce(dst1, CvArr* dst2, 1,CV_REDUCE_SUM);
dst2是一个一行一列的CvMat;对S2运用两次同样的cvReduce()函数,这样总共调用四次。
或者用cvAddWeighted()函数,将S1、S2先合并成一个,再调用两次cvReduce().