Удаление OpenCv CvWindow

Я пытаюсь получить вывод камеры и отобразить его в графическом интерфейсе С#, используя OpenCvSharp. Это код, который у меня есть на основе образцов. Однако этот код вызывает второе окно, CvWindow, которое я хотел бы удалить. Это возможно? Удаление CvWindow из моего кода приводит к тому, что поток камеры не отображается.

CvCapture cap= CvCapture.FromCamera(0);
CvWindow win= new CvWindow("camera");

while (CvWindow.WaitKey(10) < 0)
{
    IplImage img= Capture.QueryFrame();
    Bitmap bmp= BitmapConverter.ToBitmap(img);
    pictureBox1.Image = bmp;
}
win.Close();

person giroy    schedule 07.12.2011    source источник
comment
Удаление строк CvWindow win= new CvWindow("camera"); и win.Close(); не работает? Альтернативой является использование API win32, чтобы скрыть это окно.   -  person karlphillip    schedule 07.12.2011
comment
Удаление строк работает в том смысле, что второе окно исчезает. Но почему-то, когда я это делаю, программа входит в цикл while, видео не отображается и все зависает. Я не смог понять, почему, и поэтому предположил, что CvWindow был как-то необходим. Пожалуйста, поправьте меня, если я ошибаюсь.   -  person giroy    schedule 07.12.2011
comment
Если это так, то это происходит только с оболочкой C#. Вы можете попытаться переместить окно за пределы экрана или использовать API win32, чтобы скрыть его по-настоящему.   -  person karlphillip    schedule 07.12.2011
comment
Я уже пытался удалить его с помощью Win32API. Это тоже почему-то не работает. Я могу скрыть другие окна, но не CvWindow. Теперь я убираю его с экрана, но он все еще отображается на панели задач.   -  person giroy    schedule 07.12.2011
comment
В этом ответе есть интересная ссылка на то, как скрыть окна на основе их названия, это трюк, который вы используете?   -  person karlphillip    schedule 08.12.2011


Ответы (2)


Вот как я отображаю видеопотоки OpenCvSharp в форме Windows. http://www.prodigyproductionsllc.com/articles/programming/use-opencv-in-a-windows-form-application-in-c/.

Лучший способ скрыть окно — вообще не показывать его. Итак, удалите строку, в которой вы создаете новый CvWindow. Затем вам нужно переместить цикл while в новый поток и сделать его непрерывным с чем-то вроде «пока (истина)». Если вы не запустите его в отдельном потоке, ваше приложение зависнет.

person LuCuS    schedule 08.12.2011

Что ж, оказалось, что скрыть окно можно с помощью Win32 API. Однако вы должны обязательно скрыть родительское окно CvWindow.

person giroy    schedule 07.12.2011