深度とチャンネル番号が不明な画像を読み取った後、そのピクセルに 1 つずつアクセスしたいと考えています。
opencv 1.x では、コードは次のようになります。
IplImage * I = cvLoadImage( "myimage.tif" );
CvScalar pixel = cvGet2D( I, y, x );
しかしopencv 2.xでは、cv::Mat.at()
メソッドは画像のタイプを知っていることを要求します:
cv::Mat I = cv::imread( "myimage.tif" );
if( I.depth() == CV_8U && I.channels() == 3 )
cv::Vec3b pixel = I.at<cv::Vec3b>( x, y );
else if( I.depth() == CV_32F && I.channels() == 1 )
float pixel = I.at<cv::float>( x, y );
コンパイル時に画像の型を知らなくてcvGet2D
も受け取っcv::Mat
て返すことができるような関数はありますか?cv::Scalar