ページ 11

OpenCVで特定領域内のRGB値を検出する方法

Posted: 2012年1月14日(土) 20:10
by イナバ
卒業研究で動画内の右から左に駆けていく車の
交通量を調べるプログラムを製作しています。

オブジェクト検出を用いて動画中の車を
検出して、その際に点を絵画するのですが、
そこから画面内に縦のラインを設けて、
そのライン上に点が通れば1台通ったとカウント
するプログラムを作りたいのですがどうすればいいでしょうか?

Re: OpenCVで特定領域内のRGB値を検出する方法

Posted: 2012年1月14日(土) 20:18
by h2so5
指定ピクセルへアクセスするサンプルコードがあります
http://opencv.jp/sample/basic_structure ... ess_pixels

Re: OpenCVで特定領域内のRGB値を検出する方法

Posted: 2012年1月14日(土) 21:22
by イナバ
CvScalar s;
for(y = 0; y < img->height; y++) {
for(x = 0; x < img->width; x++) {
s = cvGet2D(img, y, x);
}
}

お答え頂きありがとうございます!
cvget2dで指定した画像の(x,y)座標のrgb値を取得するわけですね。

if文で画素値を調べて順次調べて、
画素値が(0,0,255)の値をカウントしていく際は

int = 0;
CvScalar s;
for(y = 150; y < img->height; 151;y++) {
for(x = 0; x < img->width; x++) {
s = cvGet2D(img, y, x);
if(s=cvScalar( 0, 0, 255 )){
i=i+1;
}
}
}

このような感じでしょうか?

Re: OpenCVで特定領域内のRGB値を検出する方法

Posted: 2012年1月14日(土) 21:29
by イナバ
[訂正]

お答え頂きありがとうございます!
cvget2dで指定した画像の(x,y)座標のrgb値を取得するわけですね。

if文で画素値を順次調べて、
画素値が(0,0,255)の値をカウントしていく際は

int = 0;
CvScalar s;
for(y = 150; y < img->height; 151;y++) {
for(x = 0; x < img->width; x++) {
s = cvGet2D(img, y, x);
if(s=cvScalar( 0, 0, 255 )){
i=i+1;
}
}
}

このような感じでしょうか?

Re: OpenCVで特定領域内のRGB値を検出する方法

Posted: 2012年1月14日(土) 21:31
by h2so5
cvGet2Dを使うのは低速なので推奨されません。
カウントするときはこのような形になると思います。

コード:

  int i = 0;
  for (y = 0; y < img->height; y++) {
    for (x = 0; x < img->width; x++) {
      uchar b = img->imageData[img->widthStep * y + x * 3];
      uchar g = img->imageData[img->widthStep * y + x * 3 + 1];
      uchar r = img->imageData[img->widthStep * y + x * 3 + 2];
	  
	  if (r == 0 && g == 0 && b == 255) {
	    i++;
	  }
    }
  }

Re: OpenCVで特定領域内のRGB値を検出する方法

Posted: 2012年1月14日(土) 21:47
by イナバ
ありがとうございました!
何とかなりそうです!m(__)m