цикл while в opencv вызывает ошибку - PullRequest
4 голосов
/ 09 января 2012

Пытаясь выполнить отслеживание планарного объекта в реальном времени с помощью opencv, я наткнулся на демонстрацию "find object" для pyopencv .Этот скрипт выполняет то, что я хочу, за исключением того, что он сравнивает одно статическое изображение с другим, тогда как я пытаюсь сравнить статическое изображение с текущим кадром, полученным с веб-камеры.С этой целью я заменил эту строку

scene_filename = "box_in_scene.png"

на эту

capture = cv.VideoCapture(0)
frame = Mat()
capture >> frame
imwrite("box_in_scene.png",frame)

. Это работает как следует, но когда я затем пытаюсь добавить простой цикл, чтобы он делал это непрерывно,проходит один цикл, затем останавливается.При выходе из скрипта я получаю следующую ошибку:

 OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupport
 ed array type) in cvGetMat, file M:\programming\packages\opencv\workspace\2.1\Op
 enCV-2.1.0\src\cxcore\cxarray.cpp, line 2476
 Traceback (most recent call last):
  File "find_obj.py", line 114, in <module>
    imageDescriptors = surf(image, mask, imageKeypoints)
 RuntimeError: M:\programming\packages\opencv\workspace\2.1\OpenCV-2.1.0\src\cxco
 re\cxarray.cpp:2476: error: (-206) Unrecognized or unsupported array type in fun
 ction cvGetMat

У кого-нибудь есть подсказка, что может быть причиной этого?

Я использую цикл

myloop = 1
while myloop == 1 :

Эта ссылка - это код целиком.

1 Ответ

0 голосов
/ 15 августа 2012

Несколько вещей приходят на ум сразу после просмотра вашего кода. Во-первых, вы объявляете новый Mat () и два новых объекта namedWindow КАЖДЫЙ раз, когда делаете цикл. Хотя это может вызвать ошибку памяти после нескольких тысяч циклов (в зависимости от вашего компьютера и ОС), скорее всего, это не ваша основная проблема. Это, однако, ужасный способ ведения дел и плохая привычка.

Моя вторая проблема с вашим кодом заключается в том, что вы сканируете изображение с видеокамеры, сохраняете его в файл, а затем повторно загружаете файл обратно в память, чтобы вы могли использовать изображение! Я понимаю, что хочу сохранить копию изображения в памяти с камеры, но у вас уже есть в памяти, так зачем его перезагружать? Если вы работаете в Windows, это может быть источником вашей плохой матрицы, поскольку у библиотек VC ++ 10, как известно, есть некоторые проблемы с imwrite и imread. [EDIT] Я знаю, что вы используете python, но ваша программа сообщает об ошибке из файла .cpp, что означает, что импорт python на самом деле где-то связан с библиотеками c ++ [/ EDIT]

Попробуйте удалить вызовы imwrite и imread в вашем цикле и использовать изображение прямо с камеры. Если ваш код работает после этого, то вы будете знать, где ваши проблемы. Дайте нам знать, как это происходит.

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