使用C API的opencv二进制阈值:设置阈值非常小将过滤掉大多数像素

时间:2017-11-22 06:38:01

标签: opencv

以下是灰度模式下的图片:

enter image description here

如果我应用阈值并将阈值设置为0.根据我的理解,该图像将大部分为白色。但结果恰恰相反。

结果是:

enter image description here

我也试过这个:

构建一个图像并将所有像素设置为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;
}

3 个答案:

答案 0 :(得分: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

enter image description here

阈值为零反转

enter image description here

enter image description here

请使用您的代码更新您的问题,以便我们知道您使用的模式,如果此答案无法提供帮助;)

答案 1 :(得分:0)

基本阈值处理是检查像素值(例如从0到255)是否高于阈值,并为像素分配最大值(高强度:黑色),这称为二进制阈值。 在您的情况下,当您将值0设置为阈值时,您实际上会过滤所有像素,因为所有像素(低强度和高强度)的值都大于零(0)。

也许你想要制作更明亮的图片 - 在这种情况下使用Inverted Binary Thresholding:在这种情况下,当值为0时,你将获得白色图片。

答案 2 :(得分:0)

根据@Miki的评论。这是由C API引起的。我用python API尝试了相同的过程。结果是正常的: 如果我用0阈值进行阈值处理,大部分像素将被设置为255。