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 функция рассчитывает угол в градусах, в противном случае они измеряются в радианах.

Другие вопросы по тегам