IplImage 'Нет' ошибка в CaptureFromFile () - Python 2.7.1 и OpenCV 2.2 WinXP - PullRequest
1 голос
/ 02 мая 2011

Я без проблем запускаю Python2.7.1 и OpenCV 2.2 на своем ноутбуке WinXP и написал программу отслеживания, которая работает без сбоев.Но по какой-то странной причине я не могу заставить эту программу запускаться на любом другом компьютере, где я пытался установить OpenCV и Python (используя те же двоичные файлы или соответствующие 64-разрядные двоичные файлы).В этих компьютерах OpenCV, кажется, правильно установлен (хотя я только протестировал и CaptureFromCamera () в веб-камере ноутбука), но CaptureFromFile () возвращает «None» и выдает «error: Array должен быть CvMat или IplImage» после QueryFrameНапример:

Этот простой код:

import cv /
videofile = cv.CaptureFromFile ('a.avi') /
frame = cv.QueryFrame (videofile)/
тип печати (видеофайл) /
тип печати (фрейм)

возвращает:

тип 'cv.Capture' /
тип 'NoneType'

  • OpenCV и Python находятся в окнах PATH ...
  • Я переместил содержимое пакетов сайтов OpenCV туда и обратно в папку Pyhton27 Lib \ Site-packages.
  • Я пробовал разные файлы avi (на случай, если это была какая-то проблема с кодеком).Этот AVI использует кодировку MJPEG (и GSpot сообщает, что ffdshow Video Decoder используется для чтения).
  • Изображения работают нормально (я думаю): простой код преобразования: im = cv.LoadImageM ("c: \ tests \colormap3.tif ") cv.SaveImage (" c: \ tests \ colormap3-out.png ", im) открывает, конвертирует и сохраняет новое изображение ...
  • Я тестировал файлы AVI в разных папках, используя "c: \", "c: /", "c: \" и "c: //".

Я потерян здесь ... У любого есть представление о том, что глупоа нуб ошибка может быть причиной этого?Спасибо

Ответы [ 3 ]

1 голос
/ 04 июня 2011

Это может звучать глупо, но у меня была та же проблема с теми же симптомами для того же фрагмента кода (Python 2.7.1, Win 7, OpenCV 2.2.0).Я изменил путь к файлу с

capture = cv.CaptureFromFile('C:\Misc\tree.avi')

на

capture = cv.CaptureFromFile('C:/Misc/tree.avi')

и вуаля

<type 'cv.Capture'>
<type 'cv.iplimage'>
1 голос
/ 27 сентября 2011

У меня была эта проблема, и вот как я ее исправил.Я взглянул на вывод команды OpenCV cmake, и в ней была следующая строка:

...
--     FFMPEG:                     NO
...

Чтобы исправить это, вы могли бы обойтись без простой установки следующих библиотек:

sudo apt-get install libavformat-dev libavcodec-dev libavfilter-dev libswscale-dev

Повторный запуск cmake, будем надеяться, теперь скажет:

...
--     FFMPEG:                     YES
...

Перекомпилируйте OpenCV, переустановите его, и, надеюсь, теперь вы можете читать видео.Если у вас все еще есть проблемы, вы можете попробовать скомпилировать ffmpeg, используя опцию --enable-shared, используя их в качестве руководства:

http://opencv.willowgarage.com/wiki/FFMPEG
http://ubuntuforums.org/showthread.php?t=786095

Надеюсь, это поможет.

0 голосов
/ 02 мая 2011

Это должно быть проблемой с кодеками по умолчанию. OpenCV использует методы грубой силы для открытия видеофайлов или захвата с камеры. Он проходит методом проб и ошибок через все источники / кодеки / apis, которые он может найти в некотором разумном порядке. (по крайней мере, 1,1 сделал так). Это означает, что в n разных системах (или днях) вы можете получить n разных способов доступа к одному и тому же видео. Например, порядок нескольких веб-камер также недетерминирован и может зависеть от порядка подключения или бабочек.

Узнайте, что использует ваш ноутбук, (переустановите) это на всех системах и повторите попытку. Кроме того, в версии с, вы можете посмотреть на свойства захвата поищите cvGetCaptureProperty и cvSetCaptureProperty, где вы могли бы указать на формат.

[EDIT] Только что посмотрел в документах, эти функции также доступны в Python. Посмотрите, это должно помочь.

...