Я собираюсь ответить на свой вопрос сейчас, так как я потратил около трех часов на поиск в Google, чтобы найти ответ на этот вопрос в StackOverflow.
Функция cv :: Mat :: checkVector () проверяет три вещи:
- Количество столбцов в массиве, как указано в первом аргументе.
Тип данных, указанный в перечислении во второмаргумент.При обнаружении ошибки в 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
Источник
- Третий и менее очевидный - проверка непрерывности входа.Это определяется третьим параметром, который по умолчанию равен 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'
.