CV_MAT_ELEM——获取矩阵元素和初始化矩阵

CV_MAT_ELEM是OpenCV中用来访问矩阵每个元素的宏,这个宏只对单通道矩阵有效,多通道会报错。

宏原型:

CV_MAT_ELEM( matrix, elemtype, row, col )

参数

matrix:要访问的矩阵

elemtype:矩阵元素的类型,不是CV_32FC1...而是float...

row:所要访问元素的行数

col:所要访问元素的列数

 

1.获取矩阵元素


  
  
  1. #include "highgui.h"
  2. #include "cv.h"
  3. #include <iostream>
  4. int main()
  5. {
  6. float a[]={ 1, 2, 3,
  7. 4, 5, 6,
  8. 7, 8, 9};
  9. CvMat mat=cvMat( 3, 3,CV_32FC1,a);
  10. for( int i= 0;i< 3;i++)
  11. {
  12. for ( int j= 0;j< 3;j++)
  13. {
  14. cout<<CV_MAT_ELEM(mat, float,i,j)<< endl;
  15. }
  16. }
  17. float b=CV_MAT_ELEM(mat, float, 0, 2);
  18. cout<< "b="<<b<< endl;
  19. return 0;
  20. }
扫描二维码关注公众号,回复: 4021622 查看本文章

2.初始化矩阵


  
  
  1. #include "highgui.h"
  2. #include "cv.h"
  3. #include <iostream>
  4. int main()
  5. {
  6. CvMat* mat=cvCreateMat( 2, 2,CV_32FC1);
  7. CV_MAT_ELEM(*mat, float, 0, 0)= 1;
  8. CV_MAT_ELEM(*mat, float, 0, 1)= 2;
  9. CV_MAT_ELEM(*mat, float, 1, 0)= 3;
  10. CV_MAT_ELEM(*mat, float, 1, 1)= 4;
  11. //验证是否初始化
  12. for( int i= 0;i< 2;i++)
  13. {
  14. for ( int j= 0;j< 2;j++)
  15. {
  16. cout<<CV_MAT_ELEM(*mat, float,i,j)<< endl;
  17. }
  18. }
  19. return 0;
  20. }


PS:对多通道矩阵初始化和获取多通道矩阵的值可分别使用cvSetND和cvGetND函数,如:


  
  
  1. #include "highgui.h"
  2. #include "cv.h"
  3. #include <iostream>
  4. int main()
  5. {
  6. CvMat* mat=cvCreateMat( 2, 2,CV_32FC2);
  7. cvSet2D(mat, 0, 0,cvScalar( 10, 10, 0, 0));
  8. CvScalar b=cvGet2D(mat, 0, 0);
  9. cout<<b.val[ 0]<< endl<<b.val[ 1]<< endl;
  10. return 0;
  11. }

转载自:https://blog.csdn.net/u010361581/article/details/9253039

猜你喜欢

转载自blog.csdn.net/baidu_38172402/article/details/83745372