Python';断言错误(depth==CV|32F | depth==CV|64F)和#x27;

Python';断言错误(depth==CV|32F | depth==CV|64F)和#x27;,python,opencv,assertion,phase,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) img_dx = cv2.Sobel(img, cv2.CV_32F, 1, 0) img_dy =

我对
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)
img_dx = cv2.Sobel(img, cv2.CV_32F, 1, 0)
img_dy = cv2.Sobel(img, cv2.CV_32F, 0, 1)
调用
cv2.phase()
时返回断言错误。相位函数的两个输入图像都是通过使用相同的输入图像调用
cv2.sobel()
函数生成的。因此,两个输入图像的数据类型都是
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

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

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)
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)
从文件中:

阶段 计算二维向量的旋转角度

C++:无效相位(输入阵列x、输入阵列y、输出阵列角度、布尔角度梯度=false)

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

参数:

x–输入2D向量的x坐标的浮点数组**

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

角度–矢量角度的输出阵列;它的大小和类型与x相同

angleInDegrees–为true时,该函数以度为单位计算角度,否则以弧度为单位测量角度