2011-10-19 8 views
3

私はOpenCV Mat構造をとり、処理を行う関数を書いています。問題は、OpenCVがstuttreにアクセスするための型に依存しない方法のように見えないので、私はこのようなことをしなければならないということです。OpenCVタイプの独立した画像アクセスに最適な方法は?

int myfunc(cv::Mat& im, int iRow, int iCol) 
{ 
    int iResult = 0; 
    if (im.type()==CV_16U) iResult = (int)im.at<unsighed short>(iRow, icol); 
    else if (im.type()==CV_8U) iResult = (int)im.at<uchar>(iRow, icol); 

    return iResult; 
} 

これを行うにはきれいな方法がありますか?

+0

+1 opencvを前回使用したときと全く同じ質問がありました。 FWIW良い答えが見つからない場合は、コードをリファクタリングしてピクセル単位で複数の関数呼び出しを行うようにしてください。ここにあるように、パフォーマンスが悪くなる可能性があります。 – user786653

答えて

1

画像処理では一般的に高性能が必要なため、8ビット、16ビット、または2つの画像タイプには異なるアルゴリズムが必要です。

テンプレート化されたすべてのタイプを使用できますが、それはたいていの場合、読みやすい文ではありません。

psパフォーマンスを気にする人は.at <>演算子を使用しないでください。.ptr()を使用して行の先頭へのポインタを取得し、ピクセルタイプを単位にしてステップします。

0

私がこれを行うために見つけた唯一の方法は、テンプレートMatクラスMat_を使用することです。

だから、あなたたとえば、次のようなものを試してみてください:

template<class T> 
T myfunc(cv::Mat_<T>& im, int iRow, int iCol) 
{ 
    return im(iRow, iCol); 
} 

希望に役立ちます!

関連する問題