opencv getImage() ошибка
Сегодня я завернул opencv интерфейсом python simplecv. Пройдя официальную поваренную книгу SimpleCV, я смог успешно загружать, сохранять и манипулировать изображениями. Таким образом, я знаю, что библиотека загружается правильно.
Однако под заголовком " Использование камеры, Kinect или виртуальной камеры" мне не удалось выполнить некоторые команды. Особенно, mycam = Camera()
работал, но img = mycam.getImage()
выдал следующую ошибку:
In [35]: img = mycam.getImage().save()
OpenCV Error: Bad argument (Array should be CvMat or IplImage) in cvGetSize, file /home/jordan/OpenCV-2.2.0/modules/core/src/array.cpp, line 1237
---------------------------------------------------------------------------
error Traceback (most recent call last)
/home/simplecv/<ipython console> in <module>()
/usr/local/lib/python2.7/dist-packages/SimpleCV-1.1-py2.7.egg/SimpleCV/Camera.pyc in getImage(self)
332
333 frame = cv.RetrieveFrame(self.capture)
--> 334 newimg = cv.CreateImage(cv.GetSize(frame), cv.IPL_DEPTH_8U, 3)
335 cv.Copy(frame, newimg)
336 return Image(newimg, self)
error: Array should be CvMat or IplImage
Я использую Ubuntu Natty на планшете HP TX2500. Он имеет встроенную веб-камеру (CyberLink Youcam?) Кто-нибудь видел эту ошибку раньше? Сегодня я был в Интернете в поисках решения, но, похоже, ничего не помогло.
Обновление 1: я протестировал cv.QueryFrame(capture), используя код, найденный здесь в отдельном вопросе о переполнении стека, и это сработало; таким образом, я в значительной степени прибил это к проблеме веб-камеры.
Обновление 2: На самом деле, я получаю те же самые ошибки на машине, у которой даже нет веб-камеры! Похоже, TX2500 не совместим...
5 ответов
Чтобы ответить на мой собственный вопрос...
Я купил Logitech C210 сегодня, и проблема исчезла. Теперь я получаю предупреждения:
Corrupt JPEG data: X extraneous bytes before marker 0xYY
,
Тем не менее, я могу успешно передать видео поток в мой веб-браузер через JpegStreamer()
, Если я не смогу решить эту ошибку, я открою новую тему.
Таким образом, пока я буду винить TX2500. Если кто-то найдет решение в будущем, пожалуйста, напишите.
Реквизит @HYRY для расследования. Благодарю.
Поскольку ошибка возникла из Camera.py в SimpleCV, вам необходимо отладить метод getImage(). Если вы можете редактировать это:
def getImage(self):
if (not self.threaded):
cv.GrabFrame(self.capture)
frame = cv.RetrieveFrame(self.capture)
import pdb # <-- add this line
pdb.set_trace() # <-- add this line
newimg = cv.CreateImage(cv.GetSize(frame), cv.IPL_DEPTH_8U, 3)
cv.Copy(frame, newimg)
return Image(newimg, self)
затем запустите вашу программу, она будет приостановлена как pdb.set_trace(), здесь вы можете проверить тип фрейма и попытаться выяснить, как получить размер фрейма.
Или вы можете сделать захват в вашем коде и проверить объект фрейма:
mycam = Camera()
cv.GrabFrame(mycam.capture)
frame = cv.RetrieveFrame(mycam.capture)
Я получаю камеру с OpenCV
from opencv import cv
from opencv import highgui
from opencv import adaptors
def get_image()
cam = highgui.cvCreateCameraCapture(0)
im = highgui.cvQueryFrame(cam)
# Add the line below if you need it (Ubuntu 8.04+)
#im = opencv.cvGetMat(im)
return im
Энтони, один из разработчиков SimpleCV здесь.
Также вместо использования image.save() эта функция записывает файл / видео на диск, вместо этого вы, вероятно, захотите использовать image.show(). Вы можете сохранить, если хотите, но вам нужно указать путь к файлу, например image.save("/tmp/blah.png")
Итак, вы хотите сделать:
img = mycam.getImage()
img.show()
Что касается этой модели камеры, я не уверен, работает ли она или нет. Я должен отметить, что мы также обертываем разные классы камер, не только OpenCV, потому что у OpenCV есть проблема с веб-камерами более 640x480, теперь мы можем делать камеры с высоким разрешением.
Также я должен упомянуть, что я не осознавал, что OpenCV менее 2.3 не работает с веб-камерами на Ubuntu 11.04 и выше. Я не осознавал этого, так как работал на Ubuntu 10.10 раньше, судя по вашему выводу, вы используете python 2.7, что заставляет меня думать, что вы работаете в Ubuntu 11.04 или выше. Во всяком случае, у нас есть решение этой проблемы. Теперь он помещается в мастер, в основном он проверяет, работает ли OpenCV, если нет, то возвращается к Pygame.
Это исправление также будет в версии 1.2 SimpleCV (теперь она в основной ветке)