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>(3、2)<< CV :: Vec3i(1、2、3)、CV :: Vec3i(2、4、6)、CV :: Vec3i(3、6、9)、CV :: Vec3i(4、8、12 ))。 用(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 ; }