Opencv Matのいくつかの初期化方式

59238 ワード

転載先:https://blog.csdn.net/jeakon/article/details/41942197
参考記事:http://www.cnblogs.com/tornadomeet/archive/2012/07/19/2599376.html
実験説明:(引用)
本文は主にopencv 2.0バージョン後に現れたMat矩形クラスについて述べ,主にopencvがdocフォルダの下にあるtutiol教材を参照する.今回の実験ではMatを使うと以下の点に特に注意が必要だと思います(コードに反映されています):
1.create関数を使用して、メモリ内のMatデータのレイアウトを変更します. 
2.マルチチャネルデータはMatにおいても1つの要素の位置を占めていることに注意してください. 
3.多次元マットの作成方法を習得する.
4.Mat行列が比較的小さい場合、直接値を与える方法、すなわちMat_を学ぶ.
5.Matマトリクスの内容を端末に出力する際のいくつかの一般的なフォーマットを把握する.
6.vectorが1次元であればMatに変換して出力する必要があり、多次元であれば直接出力することができ、例えばvectorに格納されている点であれば注意してください.

    
    
    
    
  1. #include
  2. #include
  3. #include
  4. #include
  5. using namespace std;
  6. using namespace cv;
  7. int demo_Mat()
  8. {
  9. int next_num = 1;
  10. char tmp;
  11. while(next_num< 7)
  12. {
  13. cout<< "-------- "<" --------"<< endl;
  14. waitKey( 0);
  15. switch (next_num)
  16. {
  17. case 1:
  18. {
  19. Mat M( 2, 2, CV_8UC3, Scalar(0,255,0) ); // 2*6 , 3 。
  20. cout<< "create by using the constructor..."<< endl;
  21. cout<< "M =
    "
    <endl;
  22. M.create( 4, 4, CV_8UC( 2)); // 2 2
  23. cout<< "create by using create function..."<< endl;
  24. cout<< "M =
    "
    <endl;
  25. break;
  26. } // case , ,
  27. case 2:
  28. {
  29. int sz[ 3] = { 2, 2, 2};
  30. Mat L( 3, sz, CV_8UC(1), Scalar::all(0) );
  31. cout<< "create multidimensional matrix..."<< endl;
  32. // cout<
  33. break;
  34. }
  35. case 3:
  36. {
  37. Mat E = Mat::eye( 4, 4, CV_64F);
  38. Mat O = Mat::ones( 2, 3, CV_32F);
  39. Mat Z = Mat::zeros( 3, 3, CV_8UC1);
  40. cout<< "using matlab stytle..."<< endl;
  41. cout<< "E =
    "
    <endl;
  42. cout<< "O =
    "
    <endl;
  43. cout<< "Z =
    "
    <endl;
  44. break;
  45. }
  46. case 4:
  47. {
  48. Mat C =(Mat_< double>( 3, 3)<< 0, -1, 0, -1, 5, -1, 0, -1, 0); //
  49. Mat row_clone = C.row( 1).clone();
  50. cout<< "create 3*3 double-precision identity matrix..."<< endl;
  51. cout<< "C =
    "
    <endl;
  52. cout<< "row_clone = "<endl;
  53. break;
  54. }
  55. case 5:
  56. {
  57. Mat R = Mat( 3, 2, CV_8UC3 );
  58. randu( R, Scalar::all( 0), Scalar::all( 255) );
  59. cout<< "fill a matrix with rand numbers..."<< endl;
  60. cout<< "R (default) = "<endl;
  61. cout<< "demonstrate the output formating options..."<< endl;
  62. cout<< "R (python) =
    "
    <"python")<< endl;
  63. cout<< "R (numpy) =
    "
    <"numpy")<< endl; //numpy python
  64. cout<< "R (csv) =
    "
    <"csv")<< endl; //csv,
  65. cout<< "R (c) =
    "
    <"C")<< endl;
  66. break;
  67. }
  68. case 6:
  69. {
  70. cout<< "the point format output..."<< endl;
  71. Point2f P1(5, 1);
  72. cout<< "Point (2D) = "<endl;
  73. Point3f P2(4, 5, 6);
  74. cout<< "Point (3D) = "<endl;
  75. vector< float>v;
  76. v.push_back( ( float)CV_PI);
  77. v.push_back( 2 ); //push_back
  78. v.push_back( 3.01f );
  79. cout<< "vector of float: = "<endl; //vector , mat
  80. int N = 20;
  81. vectorvPoints(N); //vector ,
  82. for( size_t E = 0; E < vPoints.size(); ++E ) //size_t unsigned int
  83. vPoints[E] = Point2f(( float)(E* 5), ( float)(E% 7));
  84. cout<< "vPoints[] =
    "
    <endl; // vector , vector
  85. // ( 2 )Mat
  86. break;
  87. }
  88. default:
  89. break;
  90. }
  91. next_num++;
  92. }
  93. return 0;
  94. }

opencv Mat        _ 1

  

opencv Mat        _ 2