ページ 11

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

Posted: 2013年1月05日(土) 16:55
by ととととも
よろしくお願いします。
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の座標を挿入
}
}
}

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

Posted: 2013年1月05日(土) 19:52
by softya(ソフト屋)
test_imageにどういう形で格納されているかが分からないと誰も答えられないと思います。

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

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

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

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

Posted: 2013年1月06日(日) 16:25
by softya(ソフト屋)
OpenCVを使っているんですね?
私はOpenCVに詳しくないのですが、二値化処理で使ったOpenCVの関数なども書きだしたほうが良いと思います。
タイトルも書き換えておきますね。

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

Posted: 2013年1月06日(日) 18:23
by みけCAT
黒色のピクセルは1個しかないのですか?
黒色のピクセルが複数ある場合、どれを採用するのですか?

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

Posted: 2013年1月06日(日) 20:37
by ととととも
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値画像を用いて黒色の部分の座標を求める

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

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

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

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

Posted: 2013年1月06日(日) 20:54
by h2so5
二値化に使用する閾値が0になっているのでどんな画像を入力しても真っ白になってしまうと思うのですが。

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

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

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

Posted: 2013年1月09日(水) 15:41
by ととととも
解決しました。
ありがとうございました。