OpenCV 2値画像を用いて黒色の部分の座標を求める

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

OpenCV 2値画像を用いて黒色の部分の座標を求める

#1

投稿記事 by ととととも » 13年前

よろしくお願いします。
2値画像を用いて黒色の部分の座標を取得したいと考えて途中までやったのですが、if分の中に書く黒色の色情報の条件の書き方がわかりません。
よろしくお願いします。

test_imageというのが今回使う二値画像の名前です。

int k=0;
int l = 0;

for( int y = 0; y < height; y++){
for(int x = 0; x <width; x++){

if(      ){
test_width[k] = x;  //xの座標を挿入
test_height[l] = y;  //yの座標を挿入
}
}
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 2値画像を用いて黒色の部分の座標を求める

#2

投稿記事 by softya(ソフト屋) » 13年前

test_imageにどういう形で格納されているかが分からないと誰も答えられないと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ととととも

Re: 2値画像を用いて黒色の部分の座標を求める

#3

投稿記事 by ととととも » 13年前

softya(ソフト屋) さんが書きました:test_imageにどういう形で格納されているかが分からないと誰も答えられないと思います。
すみません。
test_imageはIplImage*です.
オリジナルの画像→cvColorでグレースケール画像→二値化処理(test_image)

こんな感じで処理しました.
大丈夫でしょうか.

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: OpenCV 2値画像を用いて黒色の部分の座標を求める

#4

投稿記事 by softya(ソフト屋) » 13年前

OpenCVを使っているんですね?
私はOpenCVに詳しくないのですが、二値化処理で使ったOpenCVの関数なども書きだしたほうが良いと思います。
タイトルも書き換えておきますね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: OpenCV 2値画像を用いて黒色の部分の座標を求める

#5

投稿記事 by みけCAT » 13年前

黒色のピクセルは1個しかないのですか?
黒色のピクセルが複数ある場合、どれを採用するのですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ととととも

Re: OpenCV 2値画像を用いて黒色の部分の座標を求める

#6

投稿記事 by ととととも » 13年前

softya(ソフト屋) さんが書きました:OpenCVを使っているんですね?
私はOpenCVに詳しくないのですが、二値化処理で使ったOpenCVの関数なども書きだしたほうが良いと思います。
タイトルも書き換えておきますね。
すみません,ありがとうございます.
少し変えてしまったのですが,プログラムの途中だけですが載せます.そして,もう一度内容を詳しく書かせてもらいます.

test_imageはプログラムには書いていませんが,黄色の小さめの中が塗りつぶされている星型が1つ(★)描かれているものだと考えてもらえるといいと思います.

それをグレースケール画像にした後に二値画像にして,星の部分の全ての座標を取得したいです.

t_widthとt_heightの配列に,出て来た全ての黒色(または白)の星の部分のxとy座標を格納する予定です.黒(白)部分の座標はいくつあるのかわかりません.

いま気づいたのですが,二値画像にした星型の場合は黒ではなく白になるのかもしれないと思いましたので,白と付け足しをさせてもらいます.

よろしくお願いします.
__________________________________


IplImage* test_image = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3);
IplImage* gray_image = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
IplImage* niti_image = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);

int t_width[500];
int t_height[500];


cvCvtColor(test_image,gray_image,CV_BGR2GRAY);

// 画像の二値化【判別分析法(大津の二値化)】
cvThreshold (gray_image, niti_image, 0, 255, CV_THRESH_BINARY);

int k = 0;
for( int y = 0; y < niti_image->height; y++){
for(int x = 0; x < niti_image->width; x++){

if(){
t_width[k] = x;
t_height[k] = y;
k++;
}
}
}

________________________________

ととととも

Re: OpenCV 2値画像を用いて黒色の部分の座標を求める

#7

投稿記事 by ととととも » 13年前

みけCAT さんが書きました:黒色のピクセルは1個しかないのですか?
黒色のピクセルが複数ある場合、どれを採用するのですか?
質問ありがとうございます.
黒と言ってしまったのですが,二値化処理後に白になるかもしてないと思ったので、白と先ほどの質問者様には説明を付け足しましたので,お知らせをしておきます.

test_imageは黄色で塗りつぶされた★が1つ描かれた画像です.それを二値化したものを使用します.

今回は星の部分のピクセルを全てを対象にしていますので,全てのピクセルのx,y座標を取り出したいと考えています.いくつあるかわかりません.

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

Re: OpenCV 2値画像を用いて黒色の部分の座標を求める

#8

投稿記事 by h2so5 » 13年前

二値化に使用する閾値が0になっているのでどんな画像を入力しても真っ白になってしまうと思うのですが。

ととととも

Re: OpenCV 2値画像を用いて黒色の部分の座標を求める

#9

投稿記事 by ととととも » 13年前

h2so5 さんが書きました:二値化に使用する閾値が0になっているのでどんな画像を入力しても真っ白になってしまうと思うのですが。
気づきませんでした.黄色い部分は消えてしまいそうですね.
値を変更してみます.

ととととも

Re: OpenCV 2値画像を用いて黒色の部分の座標を求める

#10

投稿記事 by ととととも » 13年前

解決しました。
ありがとうございました。

閉鎖

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