2012-05-30 4 views
0

Мне нужно сохранить изображение, которое уже отображается в cvNamedWindow. Проблема в том, что исходное изображение уже может быть изменено, поэтому мне нужно как-то извлечь его из окна. В качестве альтернативного решения отображаемый в данный момент фрейм может быть сохранен в объекте IplImage, но, возможно, кто-то знает, как получить IplImage непосредственно из cvNamedWindow? Спасибо заранее. PS. Использование opencv в проекте C++.Как сохранить изображение из cvNamedWindow

ответ

0

Если вам нужно это сделать, вы все исправились.

Предположим, вы работаете с многопоточным приложением, которое захватывает кадр в 1-м потоке и отображает их с cvNamedWindow() во втором потоке. В этом случае вам необходимо предотвратить одновременный доступ к кадру этими двумя потоками: исследовать мьютексы.

В случае, если ваше приложение имеет только один поток, все, что вам нужно сделать, это выполнить cvWriteFrame() прямо перед cvNamedWindow() вызова, чтобы сохранить кадр на диск, или скопировать кадр на другой IplImage с помощью:

IplImage* copy_img = cvCreateImage(cvGetSize(orig_img), orig_img->depth, orig_img->nChannels); 

cvCopy(orig_image, copy_img, NULL); 

Просто не забудьте выпустить изображение после того, как вы сделали это, чтобы освободить выделенные ресурсы.

Смежные вопросы