Проверьте количество каналов frame
и gray
.Либо используйте отладчик, либо поставьте эту строку перед преобразованием:
printf("frame.nChannels: %d gray.nChannels: %d\n", frame.nChannels, gray.nChannels);
frame
должно быть 3 канала (RGB).gray
должен быть 1 канал.Все, кроме этого, и преобразование не удастся.В этом случае:
- Вы можете принудительно загрузить
frame
в всегда как RGB, передав cv.CV_LOAD_IMAGE_COLOR
в качестве второго аргумента cv.LoadImage
, если вы загружаетеэто из файла - Убедитесь, что при создании
gray
вы указываете, что он имеет только 1 канал, например gray=cv.CreateImage(cv.GetSize(frame), frame.depth, 1)
Посмотрите на OpenCV API для соответствующих функций для получения дополнительной информации.Раздел о Python является главой 3, но поскольку обертки Python просто повторно используют базовый код C, первая часть также имеет значение.