0

私は次のことを持っています: img は HeightXWidth の IplImage です。3 つのチャネルがあるので、次の方法ではなく別のソリューションを使用して、1 つの画像のピクセルの 3 つの値にアクセスしたいと考えています。

IplImage* img=cvCreateImage(...);
...
CvScalar scalar= cvGet2D(img, i, j); //where i and j are the coordinates of the considered pixel

double v0=scalar.val[0];
double v1=scalar.val[1];
double  v2=scalar.val[2];

私の考えは、OpenCV の依存関係を取り除き、別の方法で変更することです。

助言がありますか?

4

1 に答える 1

0

CV_IMAGE_ELEMを使用して、次のような x、y 座標でピクセルにアクセスできます

CV_IMAGE_ELEM( image_header, elementtype, y, x*N+C ) 

たとえば、IplImage *img(3 channel) の 2 番目のチャネルに i,j でアクセスする場合は、

CV_IMAGE_ELEM(img, uchar, y, (x * 3) + 1))

または以下のメソッドを使用して、r、g、b ピクセル値にアクセスします

int col, row, z;
     uchar b, g, r;
     for( y = 0; row < img->height; y++ )
     {
       for ( col = 0; col < img->width; col++ )
       {
         //for( z = 0; z < img->nChannels; z++ )
         //{
         //   c = img->imageData[img->widthStep * row + col * img->nChannels + z];
         //}
         b = img->imageData[img->widthStep * row + col * 3]
         g = img->imageData[img->widthStep * row + col * 3 + 1];
         r = img->imageData[img->widthStep * row + col * 3 + 2];
       }
     }

詳細については、このスタックオーバーフローの 質問を参照してください

于 2013-10-01T05:12:59.490 に答える