OpenCV+Python之cv2.error: OpenCV(4.1.1) C:\projects\opencv-python\opencv\modules\imgproc\src\smooth.d

通过Python自带的Tkinter模块生成GUI窗口,在设置高斯滤波的参数时,想独自创建两个文本输入框来分别控制高斯核的ksize和标准差sigmaX和sigmaY的大小,发现不能单纯的输入。

从而出现错误cv2.error: OpenCV(4.1.1) C:\projects\opencv\python\opencv\modules\imgproc\src\smooth.dispatch.cpp:189: error: (-215:Assertion failed) ksize.width > 0 && ksize.width % 2 == 1 && ksize.height > 0 && ksize.height % 2 == 1 in function ‘cv::createGaussianKernels’。

高斯滤波函数为:在OpenCV中,实现高斯滤波的函数是cv2.GaussianBlur(),该函数的语法格式是:
dst = cv2.GaussianBlur( src, ksize, sigmaX, sigmaY, borderType )

通常情况下sigmaY=0,而sigmaX是卷积核在水平方向上(X轴方向)的标准差, sigmaY是卷积核在垂直方向上(Y轴方向)的标准差。当sigmaY=0,只需要计算sigmaX的值,当sigmaX=0,则函数会自动计算出具体的值;如果两者都为0的时候,则需要通过ksize.width和ksize.height计算得到。
计算公式为:
①sigmaX=0.3×[(ksize.width-1)×0.5-1] + 0.8
②sigmaY=0.3×[(ksize.height-1)×0.5-1] + 0.8

结论:1:令sigmaX=0,则函数会直接计算出具体的值。
2:定义函数,通过自定义公式结合Ksize(必须为奇数)算出自定义的sigma值,代入高斯滤波函数,从而取代系统自动算出的值。

你可能感兴趣的:(OpenCV+tkinter)