2017-11-22 5 views
0

を除外しますが、グレースケールモードでの画像です:OpenCVのバイナリしきい値:設定した閾値非常に小さいが、ここでは、ほとんどのピクセル

enter image description here

私は私によると0に閾値化し、設定されたしきい値を適用した場合理解されている、thesholdedイメージはほとんど白です。結果は逆です。

結果は:

enter image description here

Iはまた、この試み:

は、画像を構築し、255へのすべてのピクセルを設定し、次に0しきい値閾値を適用し、返される画像はすべて255

あります

質問は の画像は、閾値処理を適用した後はほとんどゼロ(黒)です。ここで

はコードです:

IplImage* g_image = NULL; 
IplImage* g_gray = NULL; 
int   g_thresh = 100; 
CvMemStorage* g_storage = NULL; 


void on_tracker(int){ 
    if(g_storage == NULL){ 
     g_gray = cvCreateImage(cvGetSize(g_image), 8, 1); 
     g_storage = cvCreateMemStorage(0); 
    }else{ 
     cvClearMemStorage(g_storage); 
    } 

    CvSeq* contours = 0; 
    cvCvtColor(g_image, g_gray, CV_BGR2GRAY); 
    cvNamedWindow("Gray"); 
    cvShowImage("Gray", g_gray); 
    cvThreshold(g_gray, g_gray, g_thresh, 255, CV_THRESH_BINARY); 
    cvFindContours(g_gray, g_storage, &contours); 
    cvShowImage("Contours", g_gray); 
} 
int main(int argc, char** argv){ 
    if(argc !=2 || !(g_image = cvLoadImage(argv[1]))){ 
     return -1; 
    } 

    cvNamedWindow("Contours", CV_WINDOW_AUTOSIZE); 
    cvCreateTrackbar(
     "Threshold", 
     "Contours", 
     &g_thresh, 
     255, 
     on_tracker 
    ); 
    on_tracker(0); 
    cvWaitKey(); 
    return 0; 
} 
+0

何を求めていますか?これは質問ではありません。しきい値がこれを行う理由を尋ねているだけの場合は、それを明確にしてください。それに沿っていくつかのコードを提供する。 – pepperjack

+0

混乱して申し訳ありません。私は質問を更新する。 –

+0

結果のマスクを反転するには 'CV_THRESH_BINARY_INV'を使います。 –

答えて

0

あるときに、この場合には、あなたは白の画像を取得します。これはC APIによって発生します。私はpython APIで同じプロセスを試しました。結果は正常です: スレッシュホールドが0の場合、ほとんどのピクセルは255に設定されます。

1

documentationで使用可能なしきい値の異なる種類の読み取りを持っています。

1D値の範囲(黒線)と '画像' と閾値(青線)から開始:

enter image description here

...


しきい値バイナリ

enter image description here

enter image description here


しきい値バイナリ倒立

:我々は、異なるモードの結果を視覚化することができます

enter image description here

enter image description here


切り捨て

enter image description here

enter image description here


ゼロゼロ倒立

enter image description here

01に

enter image description here

enter image description here


しきい値に対する閾値


この答えはまだ解決しない場合ので、我々はあなたが使用しているもののモードを知っているあなたのコードをあなたの質問を更新してください。)

+0

私はコードを更新しました。この質問を投稿する前に私は文書をチェックしました。私の質問は、私が得た結果は、私がthoeryの私の理解と一致していないということです。 –

0

基本的なしきい値設定から言う(ピクセル値を確認することです0〜255)をしきい値より高くし、ピクセルに最大値(高輝度:黒)の値を割り当てることができます。これはバイナリしきい値と呼ばれます。 あなたの場合、しきい値を0に設定すると、すべてのピクセル(低強度と高強度)がゼロ(0)を上回るため、すべてのピクセルを実際にフィルタリングします。

たぶん、あなたは明るい絵を作りたい - このような場合には倒立バイナリ閾値化を使用します。値は三木のコメントを@にAccoring 0

+0

私はピクセルの大部分が0より大きくなければならないと思うので、255に設定する必要があります。次に、ほとんど白い画像になるはずです。しかし、そうではありません。 –

+0

あなたが言及したように、ピクセルの大部分はゼロを超えているので、閾値の後にそれらをすべて255にする - これはすべてが黒(高輝度)であることを意味します。 –

+0

0は黒です。 255は白です.. –

関連する問題