1. 程式人生 > >CV_MAT_ELEM——獲取矩陣元素和初始化矩陣

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. }

 

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