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时,该函数以度为单位计算角度,否则以弧度为单位测量角度