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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
イナバ

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

#1

投稿記事 by イナバ » 14年前

卒業研究で動画内の右から左に駆けていく車の
交通量を調べるプログラムを製作しています。

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

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

#2

投稿記事 by h2so5 » 14年前

指定ピクセルへアクセスするサンプルコードがあります
http://opencv.jp/sample/basic_structure ... ess_pixels

イナバ

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

#3

投稿記事 by イナバ » 14年前

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値を検出する方法

#4

投稿記事 by イナバ » 14年前

[訂正]

お答え頂きありがとうございます!
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;
}
}
}

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

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

#5

投稿記事 by h2so5 » 14年前

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値を検出する方法

#6

投稿記事 by イナバ » 14年前

ありがとうございました!
何とかなりそうです!m(__)m

閉鎖

“C言語何でも質問掲示板” へ戻る