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

c++, opencv

Solution

The problem was that I was putting an even value for blockSize, while it required only odd values, so changing it from 20 to 21 fixed the assert failure:

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

The docs kind of mention it, but they are not explicit it will fail if blockSize is not odd:

blockSize – Size of a pixel neighborhood that is used to calculate a threshold value for the pixel: 3, 5, 7, and so on.

As you can see, nowhere does it say "it will fail if blockSize is not odd".

Problem

I'm trying to do an adaptive threshold: ``` 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); ``` But it fails with this message: ``` OpenCV Error: Assertion failed (blockSize % 2 == 1 && blockSize > 1) in cv::adaptiveThreshold, file ..\..\..\..\opencv\modules\imgproc\src\thresh.cpp, line 797 ``` What is the problem?

Original source