Ошибка подтверждения из OpenCV checkVector в Python - PullRequest
0 голосов
/ 06 февраля 2019

OpenCV использует массивы Numpy в качестве входных данных в Python.Это абстрагирует многие характеристики базового массива C ++.

Рядом со всеми функциями в OpenCV (например, cv2.getAffineTransform) выполняют проверки входных данных в C ++, например:

inputMat.checkVector(3, CV_32F) == 3

Полученное утверждениеошибки часто являются загадочными, а иногда и неправильно выявляются в Python:

(-215:Assertion failed) src.checkVector(2, 5) == 3 && dst.checkVector(2, 5) == 3 in function 'cv::getAffineTransform'

Что именно может вызвать эти ошибки и как их интерпретировать?

1 Ответ

0 голосов
/ 06 февраля 2019

Я собираюсь ответить на свой вопрос сейчас, так как я потратил около трех часов на поиск в Google, чтобы найти ответ на этот вопрос в StackOverflow.

Функция cv :: Mat :: checkVector () проверяет три вещи:

  1. Количество столбцов в массиве, как указано в первом аргументе.
  2. Тип данных, указанный в перечислении во второмаргумент.При обнаружении ошибки в Python значение enum уже проанализировано (например, 5 для CV_32F, также известного как float32).Возможные значения:

    CV_8U 0 CV_8S 1 CV_16U 2 CV_16S 3 CV_32S 4 CV_32F 5 CV_64F 6 CV_USRTYPE1 7 Источник

  3. Третий и менее очевидный - проверка непрерывности входа.Это определяется третьим параметром, который по умолчанию равен true.Поэтому эта ошибка не видна напрямую из ошибки утверждения в Python.

Чтобы проверить свои массивы на наличие смежных макетов, вы можете взглянуть на параметр np.ndarray.flags.Numpy массивы обычно создаются C-смежными, но могут стать несмежными с помощью таких операций, как нарезка:

>> x = np.zeros((10, 68, 3))
>> x.flags
  C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False
>> x[:, [33, 36, 45]].flags
  C_CONTIGUOUS : False
  F_CONTIGUOUS : False
  OWNDATA : False
  WRITEABLE : True
  ALIGNED : True

Функция np.ndarray.copy () может снова сделать смежный массив с помощью параметраorder='C'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...