Python 'Ошибка подтверждения (глубина == CV_32F || глубина == CV_64F)'
У меня проблема с 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 ответа
Вы должны передать свои изображения как float
переменная для нахождения ребер Собеля. Поэтому измените свой код на следующее:
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)
Из документации: http://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html
Фаза Рассчитывает угол поворота 2D векторов.
C++: пустая фаза (InputArray x, InputArray y, OutputArray angle, bool angleInDegrees = false)
Python: cv2.phase (x, y [, angle [, angleInDegrees]]) → angle
Параметры:
х - вход **floating-point array**
х-координат двумерных векторов.
y - входной массив y-координат двумерных векторов; он должен иметь тот же размер и тот же тип, что и x.
angle - выходной массив векторных углов; он имеет такой же размер и **same type**
как х.
angleInDegrees - при значении true функция рассчитывает угол в градусах, в противном случае они измеряются в радианах.