プロが教える店舗&オフィスのセキュリティ対策術

OpenCVで二値画像後、白の部分の面積を求めたいのですがどのようにしたらよいでしょうか?

OS : Linux FedoraCore7

A 回答 (1件)

 こんにちは。


 当方はwindowsなのですが、openCVと言う事で、一応お話だけでも。
 iplのimageDataがグラフィックスを示す配列ですので、二値化した後、imageDataを走査しながら、ビットが立っていればカウントアップすれば白い面積が取れる様な気がします。
 以下参考程度に。

typedef struct
{
int dim;//総面積
int white;//白の面積
int black;//黒の面積
}MONOSPACE;
MONOSPACE space = {0};

//ファイルからイメージを読み込む
IplImage* img = ::cvLoadImage("TestImage.bmp", 0);

//二値化する(127以上で1を出力する)
::cvThreshold(img, img, 255 / 2, 1, CV_THRESH_BINARY);

for(int y = 0; y < img->height; y++)
{
for(int x = 0; x < img->width; x++)
{
const int val = img->imageData[y * img->widthStep + x];
if(val & 1)++space.white;//白色なのでカウントする
}
}

//総面積
space.dim = img->width * img->height;

//黒い面積
space.black=space.dim - space.white;

//iplの開放
::cvReleaseImage(&img);
    • good
    • 0
この回答へのお礼

IplImage構造体の中のimageDataを見ればよかったんですね!

ありがとうございます!!無事面積を求めることが出来ました(^^)

お礼日時:2009/02/24 17:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!