以下是灰度模式下的图片:
如果我应用阈值并将阈值设置为0.根据我的理解,该图像将大部分为白色。但结果恰恰相反。
结果是:
我也试过这个:
构建一个图像并将所有像素设置为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 :(得分:1)
在documentation中阅读可用的不同类型的阈值。
从1D'图像开始'具有一系列值(黑线)和阈值(蓝线):
......我们可以看到不同模式的结果:
阈值二进制
阈值二进制反转
<强>截断强>
阈值为零
阈值为零反转
请使用您的代码更新您的问题,以便我们知道您使用的模式,如果此答案无法提供帮助;)
答案 1 :(得分:0)
基本阈值处理是检查像素值(例如从0到255)是否高于阈值,并为像素分配最大值(高强度:黑色),这称为二进制阈值。 在您的情况下,当您将值0设置为阈值时,您实际上会过滤所有像素,因为所有像素(低强度和高强度)的值都大于零(0)。
也许你想要制作更明亮的图片 - 在这种情况下使用Inverted Binary Thresholding:在这种情况下,当值为0时,你将获得白色图片。
答案 2 :(得分:0)
根据@Miki的评论。这是由C API引起的。我用python API尝试了相同的过程。结果是正常的: 如果我用0阈值进行阈值处理,大部分像素将被设置为255。