Python错误集锦:OpenCV Scharr计算图像梯度提示(-215:Assertion failed) dx >= 0 && dy >= 0 && dx+dy == 1 in function ‘cv::getScharrKernels’

原文链接:http://www.juzicode.com/python-error-opencv-scharr-215-assertion-dx-dy-1-getscharrkernels

错误提示:

OpenCV Scharr计算图像梯度提示(-215:Assertion failed) dx >= 0 && dy >= 0 && dx+dy == 1 in function ‘cv::getScharrKernels’

#VX公众号:桔子code / juzicode.com
import cv2
print('cv2.__version__:',cv2.__version__) 

img_src = cv2.imread('sudoku.png' ,cv2.IMREAD_GRAYSCALE) 
grad = cv2.Scharr(img_src,cv2.CV_16S,1,1)
abs_grad = cv2.convertScaleAbs(grad) 
cv2.imshow('abs_grad',abs_grad)
cv2.waitKey(0)
cv2.destroyAllWindows()
==========运行结果:
cv2.__version__: 4.5.3
---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-5-857db281aa21> in <module>
      4 
      5 img_src = cv2.imread('sudoku.png' ,cv2.IMREAD_GRAYSCALE)
----> 6 grad = cv2.Scharr(img_src,cv2.CV_16S,1,1)
      7 abs_grad = cv2.convertScaleAbs(grad)
      8 cv2.imshow('abs_grad',abs_grad)

error: OpenCV(4.5.3) E:\juzicode\opencv-4.5.3\modules\imgproc\src\deriv.cpp:67: error: (-215:Assertion failed) dx >= 0 && dy >= 0 && dx+dy == 1 in function 'cv::getScharrKernels'

错误原因:

1、getScharrKernels()中要求dx和dy的关系为二者大于0且相加的和为1:

dx >= 0 && dy >= 0 && dx+dy == 1

也就是Scharr()进行梯度计算时只能进行x或y方向的其中一个方向的一阶导数。

解决方法:

1、修改Scharr()中dx和dy的传入参数,满足如下要求:dx >= 0 && dy >= 0 && dx+dy == 1

#VX公众号:桔子code / juzicode.com
import cv2
print('cv2.__version__:',cv2.__version__) 

img_src = cv2.imread('sudoku.png' ,cv2.IMREAD_GRAYSCALE) 
grad = cv2.Scharr(img_src,cv2.CV_16S,1,0)
grady = cv2.Scharr(img_src,cv2.CV_16S,0,1) #分2次计算图像梯度
abs_grad = cv2.convertScaleAbs(grad) 
abs_grad_y = cv2.convertScaleAbs(grady) 
cv2.imshow('abs_grad',abs_grad)
cv2.imshow('abs_grad_y',abs_grad_y)
cv2.waitKey(0)
cv2.destroyAllWindows()

扩展内容:

  1. OpenCV-Python教程


如果本文还没有完全解决你的疑惑,你也可以在微信公众号“桔子code”后台给我留言,欢迎一起探讨交流。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注