OpenCV 2値化について
いつもお世話になっております。
画像の2値化(黒は全てゼロ、白は全て255)をした画像bw_imgを用意して
左上端から11×11サイズのROIに切り取って決まった処理をかけていこうとしていますが、
2値化した画像をROIで保持させることができず、困っています。
int main()
{ //画像の2値化処理用変数
IplImage *src_img = 0, *dst_img = 0, *bw_img = 0;
IplImage *src_img_gray = 0;
IplImage *tmp_img, *out_img, *lap_img;
CvMemStorage *storage = cvCreateMemStorage(0);
CvSeq *contours = 0;
// (1)画像を読み込み、グレースケール化(src_img_gray)、二値化(tmp_img)
src_img = cvLoadImage("C:\\Users...\\サンプル画像\\sample.jpg", CV_LOAD_IMAGE_COLOR);
tmp_img = cvCreateImage(cvGetSize(src_img), IPL_DEPTH_8U, 1);
src_img_gray = cvCreateImage(cvGetSize(src_img), IPL_DEPTH_8U, 1);//もとはIPL_DEPTH_8U
cvCvtColor(src_img, src_img_gray, CV_BGR2GRAY);
cvAdaptiveThreshold(src_img_gray, tmp_img, 255, CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY, 7, 8);
//11×11 走査用変数
dst_img = cvCreateImage(cvGetSize(tmp_img), IPL_DEPTH_8U, 1);
bw_img = cvCreateImage(cvGetSize(tmp_img), IPL_DEPTH_8U, 1);
out_img = cvCreateImage(cvGetSize(tmp_img), IPL_DEPTH_8U, 1);
cvThreshold(tmp_img, bw_img, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
for (x = 0; x < bw_img->width; x++){ // x 座標を 1ピクセルずつ進める
for (y = 0; y < bw_img->height; y++){ // y 座標を 1ピクセルずつ進める
//(1) 11×11ピクセルに切り取って2値化する。
cvCopy(bw_img, dst_img);
lap_img = cvCreateImage(cvSize(11, 11), IPL_DEPTH_8U, 1);
CvMat *sub = cvCreateMatHeader(11, 11, CV_8UC1);
cvGetSubRect(bw_img, sub, cvRect(y, x, 11, 11)); //コピー画像から11×11切り取り。
cvThreshold(sub, lap_img, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU); //2値化、結果はlap_img.
uchar iro = lap_img->imageData[lap_img->widthStep * (y + 6) + (x + 6)];
if (iro ==0){ →ここでどうみても黒なのにiroに「238」「71」などの値が入っています。
roiで切り取ったlap_imgが2値になっていません。
何が問題で2値化できていないのでしょうか。
どうすると2値化した画像(lap_img)を決まったサイズのウィンドウで扱えるでしょうか。
もしおわかりでしたらヒントでも結構ですのでぜひ教えてください。
よろしくお願いします。