Ошибка в том, что вы передаете значение BOOLEAN
вместо значения Mat
в функции imshow()
OpenCV здесь:
cv2.imshow('frame',ret)
Таким образом, вы должны передать кадр:
[111 ] cap.read()
в Python
возвращает два значения, одно из которых - Boolean
, которое показывает, было ли успешно прочитано фрейм, а второе - сам фрейм. Поэтому вы должны проверить ret
, если это true
, а затем показать кадр.
Некоторые возможные причины для катастрофического отказа:
obj
точки к объекту с неполиморфным типом (класс или структура без виртуальных методов или фундаментальный тип). obj
точки к объекту, который был освобожден. obj
точки к неотображенной памяти или памяти, которая была отображена таким способом как для генерации исключения при доступе (такие как защитная страница или недоступная страница). obj
точки к объекту с полиморфным типом, но тем типом был определен во внешней библиотеке, которая была скомпилирована с отключенным RTTI. Не все эти проблемы обязательно вызывают катастрофический отказ во всех ситуациях.
Я предлагаю использовать другой синтаксис для этого фрагмента кода.
if (MonitorObjectH1C* monitorObject = dynamic_cast<MonitorObjectH1C*>(obj))
{
axis = monitorObject->GetXaxis();
}
можно все еще отказать, если некоторый другой поток удаляет то, на что указывает monitorObject или если obj является сумасшедшим мусором, но по крайней мере проблема не бросает связанный больше, и Вы не делаете dynamic_cast дважды.
Поскольку это отказывает только иногда, я держал пари, что это - проблема поточной обработки. Проверьте все ссылки на 'obj':
grep -R 'obj.*=' .
dynamic_cast возвратится 0, если состав исполнителей перестанет работать, и Вы бросаете к указателю, который является Вашим случаем. Проблема состоит в том, что Вы или повредили "кучу" ранее в Вашем коде, или rtti не был включен.
Вы уверены, что значение 'obj' было правильно определено?
, Если, например, это является неинициализированным (т.е. случайным) их я видел, что он вызвал катастрофический отказ.