Python'断言错误(深度== CV_32F ||深度== CV_64F)'

时间:2017-04-27 18:10:25

标签: python opencv assertion phase

我的cv2.phase()功能有问题。我编码如下:

img = cv2.imread("1.jpg", 0)
cv2.imshow("image", img)

img_dx = cv2.Sobel(img, cv2.CV_8U, 1, 0)
img_dy = cv2.Sobel(img, cv2.CV_8U, 0, 1)
angles = cv2.phase(img_dy, img_dx)

并在调用cv2.phase()时返回断言错误。通过使用相同输入图像调用cv2.sobel()函数来生成到相位函数的两个输入图像。因此,两个输入图像的dtype都是uint8,并且它们具有相同的大小。所以我不明白为什么我会得到一个断言错误。

我得到的完整错误信息是:

OpenCV Error: Assertion failed (src1.size() == src2.size() && type == src2.type() && (depth == CV_32F || depth == CV_64F)) in cv::phase, file ..\..\..\modules\core\src\mathfuncs.cpp, line 209

2 个答案:

答案 0 :(得分:1)

您必须将图像作为float变量传递,才能找到Sobel边缘。因此,请将代码更改为以下内容:

img_dx = cv2.Sobel(img, cv2.CV_32F, 1, 0)
img_dy = cv2.Sobel(img, cv2.CV_32F, 0, 1)

现在你应该能够找到阶段......

弧度的阶段:

OpenCV默认情况下以弧度为单位找到相位:

phase = cv2.phase(sobelx, sobely)

度的阶段

要指定您希望以度为单位的阶段,您必须设置标记angleInDegrees = True,如下所示:

phase = cv2.phase(sobelx, sobely, angleInDegrees = True)

答案 1 :(得分:0)

来自文档: http://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html#phase

相 计算2D矢量的旋转角度。

C ++:void phase(InputArray x,InputArray y,OutputArray angle,bool angleInDegrees = false)

Python:cv2.phase(x,y [,angle [,angleInDegrees]])→angle

参数:

x - 输入**floating-point array** 2D矢量的x坐标。

y - 输入2D矢量的y坐标数组;它必须与x具有相同的大小和相同的类型。

角度 - 矢量角度的输出数组;它的大小和x **same type**相同。

angleInDegrees - 当为true时,函数以度为单位计算角度,否则,以弧度为单位计算。