opencvを用いた二値画像のアクセスと座標の取得
いつもお世話になっています。
opencvを用いたプログラムを作成しています。
真ん中に大きな塗りつぶされた●が1つあるカラー画像を二値画像に変換して、●の部分のすべての座標をとりたいと考えています。(●は大きいので1ピクセルではありません。●を構成しているピクセルの座標すべてをとるといった感じです。)
今、途中まで作成したのですが間違っているところがあると考えられるので、エラーは出ないのですがプログラムが正常に動きません。このプログラム内での間違いであるとは考えられるので、間違っている部分を教えてもらえないでしょうか?
よろしくお願いします。
//元のカラー画像
IplImage* 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 test_width[500];
int test_height[500];
//カラー画像ここでimage画像に大きな●を書きました。これ以降は●がimageに存在するものとして考えてくださいお願いします
cvDrawContours( image, hand_contour[0], CV_RGB (0, 0, 0), CV_RGB (0, 0, 0), -1, CV_FILLED, 8 ,cvPoint(0,0));
//グレースケールの作成
cvCvtColor(image,gray_image,CV_BGR2GRAY);
// 画像の二値化【判別分析法(大津の二値化)】
cvThreshold (gray_image, niti_image, 90, 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(niti_image->imageData[y * niti_image->widthStep + x * niti_image->nChannels] == 0){
test_width[k] = x;
test_height[k] = y;
k++;
}//if
}
}
お礼
こんにちは。 コーディングを含め勉強します。 手段を提示して頂けて助かりました。 ご回答ありがとうございました。