cv :: adaptiveThreshold中的断言失败(blockSize%2 == 1&& blockSize> 1)

时间:2014-12-03 10:00:37

标签: c++ opencv

我试图做一个自适应阈值:

cv::Mat mat = cv::imread(inputFile);
cv::cvtColor(mat, mat, CV_BGR2GRAY);
cv::adaptiveThreshold(mat, mat, 255, cv::ADAPTIVE_THRESH_MEAN_C, cv::THRESH_BINARY, 20, 0);
cv::imwrite(outputFile, mat);

但它失败了这条消息:

OpenCV Error: Assertion failed (blockSize % 2 == 1 && blockSize > 1) in cv::adaptiveThreshold, file ..\..\..\..\opencv\modules\imgproc\src\thresh.cpp, line 797

有什么问题?

1 个答案:

答案 0 :(得分:6)

问题是我为blockSize设置了一个偶数值,而它只需要奇数值,所以将它从20改为21修复了断言失败:

cv::adaptiveThreshold(mat, mat, 255, cv::ADAPTIVE_THRESH_MEAN_C, cv::THRESH_BINARY, 21, 0);

The docs有点提及它,但是如果blockSize不是奇怪的话,它们不会明确失败:

  

blockSize - 用于计算像素阈值的像素邻域的大小:3,5,7等。

正如你所看到的,没有任何地方说“如果blockSize不奇怪就会失败”。