1

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 である必要があります)。

あらゆる種類の助けをいただければ幸いです。

前もって感謝します。

4

1 に答える 1

0

CV_THRESH_BINARY_INVそれはあなたのイメージを反転させるためだと思います。したがって、白であると予想される領域は、実際には DT では黒です。

もちろん、画像を反転するのはあなたの意図かもしれません。画像を表示し、検証のためimに比較しますtmp

于 2015-03-20T10:40:12.547 に答える