Matlab程序转C++/OpenCV不可不知的17个函数

1、 matlab中的imread相当于OpenCV中的cvLoadImage(imageName, CV_LOAD_IAMGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR):读出的图像信息保持了原有图像的信息(包括通道信息和位深信息);

rgb2gray相当于cvLoadImage(imageName, CV_LOAD_IMAGE_GRAYSCALE):单通道灰度图;

或用cvCreateImage、cvCvtColor两函数实现图像的灰度化。

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)。

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)。


原文:http://blog.csdn.net/yanzi1225627/article/details/7553798

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
contourc函数的作用是计算等值线数据,返回一个矩阵,其包含等值线的坐标和属性。在C++可以使用以下代码实现: ```c++ #include <iostream> #include <vector> #include <cmath> using namespace std; struct Point { double x, y; }; vector<vector<Point>> contourc(vector<vector<double>>& data, double level) { int rows = data.size(); int cols = data[0].size(); vector<vector<int>> visited(rows, vector<int>(cols, 0)); vector<vector<Point>> contours; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { if (visited[i][j] == 0 && data[i][j] > level) { vector<Point> contour; Point p = {j, i}; contour.push_back(p); visited[i][j] = 1; int x = j; int y = i; int dx = 0; int dy = -1; while (true) { int nx = x + dx; int ny = y + dy; if (nx < 0 || nx >= cols || ny < 0 || ny >= rows || visited[ny][nx] == 1) { dx = dy; dy = -nx; nx = x + dx; ny = y + dy; if (nx < 0 || nx >= cols || ny < 0 || ny >= rows || visited[ny][nx] == 1) { break; } } Point np = {nx, ny}; contour.push_back(np); visited[ny][nx] = 1; x = nx; y = ny; } contours.push_back(contour); } } } return contours; } int main() { vector<vector<double>> data = {{1, 2, 3}, {2, 3, 4}, {3, 4, 5}}; double level = 3.5; vector<vector<Point>> contours = contourc(data, level); for (int i = 0; i < contours.size(); i++) { cout << "Contour " << i << ": "; for (int j = 0; j < contours[i].size(); j++) { cout << "(" << contours[i][j].x << ", " << contours[i][j].y << ") "; } cout << endl; } return 0; } ``` 这个实现方法是基于扫描线法的,先找到第一个大于等于level的点,然后沿着等值线方向扫描,找到下一个点,直到回到起点。在扫描的过程,需要判断边界和已经访问过的点。用一个visited矩阵来记录已经访问过的点。最后将每个等值线的点存储在一个vector,所有的等值线存储在一个vector<vector<Point>>返回。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值