OpenCVのC ++構造とアクセスシングルチャネルおよびマルチチャネルマット。

A:シングルチャネルへの構造とアクセス。

  
  {int型のmain()
    CV ::マットM =(CV :: Mat_ <整数>(3,2)<< 1,2,3,4,5,6)。
    {(; iがm.rowsを<++ iが0 = INT)のために
        (int型J = 0; jの<m.cols; ++ j)のための
            std :: coutの<< m.at <整数>(i、j)が<< ""; //次元1に沿った寸法0、COLランキングに沿って一列インデックス
        std :: coutの<<はstd ::てendl;
    }
    // CV ::サイズサイズ= m.size();
    std :: coutの<< "サイズ:" << m.size()<<はstd ::てendl; // m.size():幅と高さを返します。
    std :: coutの<< "チャンネル:" << m.channels()<<はstd ::てendl; // m.channels()メソッドは、行列チャネルの数を返します。
    std :: coutの<< "トータル:" << m.total()<<はstd ::てendl; // m.total()メソッドは、配列要素の数を返します
    std :: coutの<< "次元:" << m.dims <<はstd ::てendl; // m.dims:行列の次元、> = 2。
 
 
    {(; iがm.rowsを<++ iが0 = INT)のために
        const int型* PTR = m.ptr <整数>(ⅰ); // Iベースの行インデックス。
        (int型J = 0; jの<m.cols; ++ j)のための
            std :: coutの<< PTR [J] << "";
        std :: coutの<<はstd ::てendl;
    }
 
 
    IF(m.isContinuous()){
        const int型* PTR = m.ptr <整数>(0); // 0ベースの行インデックス。
        (;私はm.rows * m.colsを<; ++ iは0 = INT)について
            std :: coutの<< PTR [I] << "";
        std :: coutの<<はstd ::てendl;
    }
 
 
    以下のために(; iはm.rowsを<; I = 0 int型++ I){//類似以下
        (INT J = 0; J <m.cols; ++ j)のための{
           INT * PTR =(int型*)(m.data + m.step [0] * iが+ m.step [1] * J)。
            std :: coutの<< * PTR << "";
        }
        std :: coutの<<はstd ::てendl;
    }
 
 
    {(; iがm.rowsを<++ iが0 = INT)のために
        (int型J = 0; jの<m.cols; ++ j)のための
            std :: COUT << *((INT *)(m.data + m.step [0] * iが+ m.step [1] * J))<< ""。
        std :: coutの<<はstd ::てendl;
        @次元画像:ステップ[0]、各行が占めるバイト数を表し、そして間隔を置いた場合、その後、この区間の一部としてカウントされたバイト数です。
        @次元画像:ステップ[1]の各値によって占有されるバイト数を表します。
        //データは、最初の値、タイプUCHARへのポインタです。
 
 
        //(int型*)(BASEADDR + IER)これは、int型のポインタに強制されます。
        // *((INT *)(BASEADDR + IER))ポインタの値をとります。
        // BASEADDR + IERはアドレスです。
 
 
    }
    0を返します。
}
  
  

II:構造とマルチチャネルへのアクセス。

#include <opencv2 /コア/ core.hpp> 
の#include <opencv2 /のHighGUI / highgui.hpp> 
の#include <iostreamの>
 int型のmain(){ 
    CV ::マットM =(CV :: Mat_ <CV :: Vec3i>(32)<< CV :: Vec3i(123)、CV :: Vec3i(246)、CV :: Vec3i(369)、CV :: Vec3i(4812 ))。
    int型 iは= 0 ; iがm.rowsを<; ++ i)が{
         int型 J = 0 ; jの<m.cols; ++ J)
            のstd :: coutの << m.at <CV :: Vec3i>(i、j)が<< " " ;  // 寸法0、次元1に沿ってCOLランキングに沿って一列索引 
        はstd :: coutの<< はstd :: ENDL。
    } のためにint型 i = 0 ; iはm.rowsを<; ++ I){
         CONST CV :: Vec3i * PTR = m.ptr <CV :: Vec3i>(I)。  // Iベースの行インデックス。INT J = 0 ; J <m.cols; ++ j)は
            STD :: COUT << PTR [J] << " "

    
        
        std :: coutの << はstd ::てendl; 
    } 

    であれば(m.isContinuous()){
         CONST CV :: Vec3i * PTR = m.ptr <CV :: Vec3i>(0)。  // 0ベースの行インデックス。
        以下のためにint型私= 0 ;私はm.rows * m.colsを<; ++ I)
            のstd :: coutの << PTR [I] << " " ; 
        std :: coutの << はstd ::てendl; 
    } のためにint型 I = 0 ; iがm.rowsを<; ++ i)が{   // 与下面相似ためINT J = 0 ; J <m.cols; ++

    
        J){ 
            CV :: Vec3i * PTR =(CV :: Vec3i *)(m.data + m.step [ 0 ] * iが+ m.step [ 1 ] * J)。
            std :: coutの << * PTR << " " ; 
        } 
        のstd :: coutの << はstd :: ENDL。
    } のためにint型 i = 0 ; iはm.rowsを<; ++ I){
         ためのint型 J = 0 ; J <m.cols; ++ j)は
            STD :: COUT << *((CV :: Vec3i * )(m.data + m.step [ 0 ] * iが[m.stepを+ 1 ] * J))<< " " 

    
        :: COUT STD << STD :: ENDL;
         // 次元画像:この区間の一部がカウントバイトの数であるとして、次に、ステップ[0]、各行が占めるバイト数を表し、そして場合離間。
         @ 次元画像:ステップ[1]によって占有されるバイト数の各値を表す。
         // データが第1の値、タイプUCHARへのポインタである。

        // (CV :: Vec3i *)(M。データ+ m.step [0] * iが + m.step [1] * jは) Vec3i型ポインタにそれを強制する。
         // *((CV :: Vec3i *)(+ m.data m.step [0 ] * iがm.step [1] + * J))はポインタの値をとる。
         // m.data + m.step [0]私はm.stepが[1] J *はアドレス+ *。

    } 

    戻り 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/ligei/p/11487759.html
おすすめ