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

Assertion failed (blockSize % 2 == 1 && blockSize > 1) in cv::adaptiveThreshold

本文关键字:blockSize in cv 失败 adaptiveThreshold gt 断言      更新时间:2023-10-16

我正在尝试执行自适应阈值:

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 ........opencvmodulesimgprocsrcthresh.cpp, line 797

问题出在哪里?

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

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

文档有点提到它,但他们没有明确,如果 blockSize 不奇怪,它会失败:

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

如您所见,它没有任何地方说"如果块大小不奇怪,它将失败"。