CのOpenCVライブラリを使用して、バイナリ画像の各ピクセルの距離変換を見つけようとしています.DTのルールによれば、各ゼロ(黒)ピクセルの値は0でなければなりません.255(白)ピクセルの値距離変換を適用した後、ゼロ (黒) ピクセルまでの最短距離である必要があります。
ここにコードを投稿します。
IplImage *im = cvLoadImage("black_white.jpg", CV_LOAD_IMAGE_GRAYSCALE);
IplImage *tmp = cvCreateImage(cvGetSize(im), 32, 1);
cvThreshold(im, im, 128, 255, CV_THRESH_BINARY_INV);
//cvSaveImage("out.jpg", im);
cvDistTransform(im, tmp, CV_DIST_L1, 3, 0, 0 );
d = (uchar*)tmp->imageData;
da = (uchar*)im->imageData;
for(i=0;i<tmp->height;i++)
for(j=0;j<tmp->width;j++)
{
//if((int)da[i*im->widthStep + j] == 255)
fprintf(f, "pixel value = %d DT = %d\n", (int)da[i*im->widthStep + j], (int)d[i*tmp->widthStep + j]);
}
cvShowImage("H", tmp);
cvWaitKey(0);
cvDestroyWindow("H");
fclose(f);
ピクセル値を DT 値と共にファイルに書き込みます。判明したように、0 ピクセルの一部は 65、128 などの DT 値を持ちます。つまり、0 ではありません。さらに、DT 値が 0 の白いピクセルもいくつかあります (これは発生しないと思います)少なくとも 1 である必要があります)。
あらゆる種類の助けをいただければ幸いです。
前もって感謝します。