対象画素ブロックデータポインタ、バイトに基づいてポインタ操作、高速ピクセルトラバーサル法(1280、色、完了するまでに、ほんの数ミリ秒)に直接アクセスするマット。データストレージおよび組織マット画素ブロックデータオブジェクト、オブジェクトマットは二つの部分、プラス画素データ部のメタデータ・ヘッダ・ブロックから成ります。
コードは次のように実装されています。
無効 img_Byte_ptr(マット&画像){ 二重 T1 = のGetTickCountを(); int型ワット= image.cols。 INT H = image.rows。 用(INTの列= 0、行<H;行++ ){ UCHAR * uc_pixel = image.data +行* image.step。 用(INT COL = 0 ; <W COL; ++ COL ){ uc_pixel [ 0 ] = 255 - uc_pixel [ 0 ]。 uc_pixel [ 1 ] = 255- uc_pixel [ 1 ]。 uc_pixel [ 2 ] = 255 - uc_pixel [ 2 ]。 uc_pixel + = 3 。 } } 二重 T2 = のGetTickCount(); ダブル T =((T2 - T1)/ getTickFrequency())* 1000年。 ostringstreamのSS。 SS << " 時間実行します。" <<のstd :: 固定 <<のstd ::てSetPrecision(2)<< T << " ミリ秒" 。 putText(画像、ss.str()、ポイント(20、20)、FONT_HERSHEY_SIMPLEX、0.75、スカラー(0、0、255)、2、8 )。 関数imshow(" 結果" 、画像)。 }
OpenCVのC ++のメモリ管理でマットオブジェクトは、スマートポインタに基づいてOpenCVの枠組み、メモリ管理による自動メモリ割り当てと回復のための責任があります。
直接の唯一の適切な使用データが直接アクセスポインタが、これは明示的に公式OpenCVのチュートリアルに記載しませんでした。