MedianBlur() calculate max kernel size

asked 2019-05-05 21:12:15 -0600

I want to use MedianBlur function with very high Ksize, like 301 or more. But if I pass ksize too high, sometimes the function will crash. The error message is:

OpenCV Error: (k < 16) in cv::medianBlur_8u_O1, in file ../opencv\modules\imgproc\src\smooth.cpp

(I use opencv4nodejs, but I also tried the original OpenCV 3.4.6).

I did reduce the ksize in a try/catch loop, but not so effective, since I have to work with videos.

I did checkout the OpenCV source code and did some researches. In OpenCV 3.4.6, the crash come from line 241, file opencv\modules\imgproc\src\median_blur.simd.hpp:

for ( k = 0; k < 16 ; ++k )
{
  sum += H.coarse[k];
  if ( sum > t )
  {
     sum -= H.coarse[k];
     break;
  }
}
CV_Assert( k < 16 ); // Error here

t is caculated base on ksize. But sum and H.coarse array's calculations are quite complicated.

Did further researches, I found a scientific document about the algorithm: https://www.researchgate.net/publicat...

I am trying to read but honestly, I don't understand too much.

How do I calculate the maximum ksize with a given image?

edit retag flag offensive close merge delete

Comments

I use opencv4nodejs

we cannot help with (unsupported) 3rdparty wrappers, sorry

berak gravatar imageberak ( 2019-05-06 02:43:55 -0600 )edit