Mat 转变成IplImage* 类型
Mat srcImg; // Mat type variable . IplImage *dst = NULL; // Initialize by NULL. srcImg = imread(imagePath); // read image; dst = &(IplImage(srcImg)); // Mat to IplImage Pointer dst = NULL; // set as NULL.
Mat I; IplImage* pI = &I.operator IplImage(); CvMat* mI = &I.operator CvMat();
高斯平滑
GaussianBlur( image, out, Size( 3, 3 ), 0, 0 );
均值滤波
Blur( image, out, Size( 3, 3 ) );
两个矩阵合并
有的时候我们需要将几个矩阵按行或者按列进行合并成一个大矩阵,这在Matlab里面非常的简单,但在OpenCV里面并没有这样的方法,现在我在OpenCV的源码里面发现合并矩阵的方法,分享给大家。
A = [1 2 3 4]; B = [2 3 4 5]; C = [A;B];
上面的是Matlab语言的矩阵合并,非常的简洁简单。接下来我给出OpenCV的两个矩阵的合并代码.
Mat mergeRows(Mat A, Mat B) { CV_ASSERT(A.cols == B.cols&&A.type() == B.type()); int totalRows = A.rows + B.rows; Mat mergedDescriptors(totalRows, A.cols, A.type()); Mat submat = mergedDescriptors.rowRange(0, A.rows); A.copyTo(submat); submat = mergedDescriptors.rowRange(A.rows, totalRows); B.copyTo(submat); return mergedDescriptors; }
1、matlab中的imread相当于OpenCV中的imread
2、matlab中的zeros函数相当于OpenCV中的cvSetZero函数。
3、matlab中的两矩阵点乘 .* 相当于OpenCV中的cvMul函数。
4、matlab中的两矩阵点除 ./ 相当于OpenCV中的cvDiv函数。
5、matlab中的两矩阵相加 + 相当于OpenCV中的cvAdd函数。
6、matlab中的两矩阵相减 - 相当于OpenCV中的cvSub函数。
7、matlab中的矩阵和一个常量相加 A + a 相当于OpenCV中的cvAddS函数 cvAdds(matA, cvScalar(a), matB)。
8、matlab中的矩阵和一个常量相减 A - a 相当于OpenCV中的cvSubS函数 cvSubS(matA, cvScalar(a), matB)。
9、matlab中的给矩阵赋一初值 A(:, :) = a 相当于OpenCV中的cvSet函数 cvSet(matA, cvScalar(a))。
10、matlab中取矩阵某一部分赋给另一矩阵 A = B(i : j, m : n) 相当于OpenCV中的cvGetSubRect 函数,cvGetSubRect(mat1, mat2, rect)。
11、matlab中取矩阵最大值、最小值 max(max(A))、min(min(A)) 相当于OpenCV中的cvMinMaxLoc函数 cvMinMaxLoc(A, minloc, maxloc)。
12、matlab中两矩阵相乘 A * B 相当于OpenCV中的cvMatMul函数,cvMatMul(A, B, C)。
13、matlab中计算两个三维向量的叉积 C = cross(A, B) 相当于OpenCV中的cvCrossProduct函数,cvCrossProduct(A, B, C)。
14、matlab中计算向量的范数 c = norm(A) 相当于OpenCV中的cvNorm函数,c = cvNorm(A)。
下面是matlab中的定义,对应需要考虑OpenCV中的实现
1、如果A为矩阵 n=norm(A) 返回A的最大奇异值,即max(svd(A)) n=norm(A,p) 根据p的不同,返回不同的值 p 返回值 1 返回A中最大一列和,即max(sum(abs(A))) 2 返回A的最大奇异值,和n=norm(A)用法一样 inf 返回A中最大一行和,即max(sum(abs(A’))) ‘fro’ A和A‘的积的对角线和的平方根,即sqrt(sum(diag(A'*A))) 2、如果A为向量 norm(A,p) 返回向量A的p范数。即返回 sum(abs(A).^p)^(1/p),对任意 1<p<+∞. norm(A) 返回向量A的2范数,即等价于norm(A,2)。 norm(A,inf) 返回max(abs(A)) norm(A,-inf) 返回min(abs(A))
15、matlab中求二维矩阵的奇异值分解 [u s v] = svd(A, 0) 相当于OpenCV中的cvSVD函数 cvSVD(A, s, u, v)。
16、matlab中两矩阵左除 c = a / b 相当于OpenCV中的cvInvert、cvMatMul两函数即:cvInvert(a, d); cvMatMul(d, b, c)。
17、matlab中的求矩阵的逆inv函数 A = inv(B) 相当于OpenCV中的cvInvert函数:cvInvert(B,A)。
18、matlab中的矩阵除以一个数A/a相当于OpenCV中的函数cvConvertScale
19、matlab中的求和函数sum相当于OpenCV中的函数cvSum
20、matlab中将world coordinate中的点矩阵X变到camera coordinate中的变换R*X+T可以用函数cvMatMulAdd实现,但需注意,translation是一个3行N列的矩阵。
21、matlab中矩阵乘一个常数可用cvConvertScale实现。