2

オブジェクト検出にOpenCVを使用していますが、実行できるようにしたい操作の1つは、ピクセルごとの平方根です。ループは次のようになると思います。

IplImage* img_;
...
for (int y = 0; y < img_->height; y++) {
  for(int x = 0; x < img_->width; x++) {
    // Take pixel square root here
  }
}

私の質問は、IplImageオブジェクトの座標(x、y)のピクセル値にアクセスするにはどうすればよいですか?

4

4 に答える 4

3

img_ が IplImage 型であり、16 ビットの符号なし整数データであると仮定すると、次のようになります。

unsigned short pixel_value = ((unsigned short *)&(img_->imageData[img_->widthStep * y]))[x];

IplImage の定義については、こちらも参照してください。

于 2009-06-15T21:25:43.787 に答える
1

CV_IMAGE_ELEM マクロを使用してください。また、自分でピクセルを操作する代わりに、power=0.5 で cvPow を使用することを検討してください。

于 2009-07-08T15:31:45.727 に答える
1

OpenCV IplImage は 1 次元配列です。画像データを取得するには、単一のインデックスを作成する必要があります。ピクセルの位置は、画像の色深度とチャンネル数に基づきます。

// width step 
int ws = img_->withStep;
// the number of channels (colors)
int nc = img_->nChannels;
// the depth in bytes of the color 
int d = img_->depth&0x0000ffff) >> 3;
//  assuming the depth is the size of a short
unsigned short * pixel_value = (img_->imageData)+((y*ws)+(x*nc*d));
// this gives you a pointer to the first color in a pixel
//if your are rolling grayscale just dereference the pointer. 

ピクセル ポインター pixel_value++ を移動することで、チャネル (色) を選択できます。これが何らかのリアルタイム アプリケーションになる場合は、ピクセルの平方根のルックアップ テーブルを使用することをお勧めします。

于 2009-06-18T22:05:52.623 に答える
0

ここにある Gady Agam の素敵な OpenCV チュートリアルで、画像要素に到達するいくつかの方法を見つけることができます。

于 2009-06-22T20:05:50.360 に答える