Я работаю над проектом для поиска через базу данных изображений, и когда я нахожу результаты для некоторых запросов - 5 изображений базы данных, я хотел бы визуально отображать результаты. Я не сохраняю все изображения в памяти, поэтому сначала загружаю изображение, чтобы отобразить его.
У меня было что-то простое, в псевдокоде:
for image 1..5
load images
display image in a window
wait for any keypress
close the window
Вот фрагмент моего кода в C++
с помощью OpenCV
для этой цели:
IplImage *img;
for (int i=0; i < 5; ++i){
img = cvLoadImage(images[i].name.c_str(),1);
cvShowImage(("Match" + images[i].name).c_str(), img);
cvWaitKey(0);
cvDestroyWindow(("Match" + images[i].name).c_str());
// sleep(1);
cvReleaseImage(&img);
}
Используемый здесь массив images
не такой, как такой, как в моем коде, но для этого вопроса он содержит имена файлов изображений относительно текущей текущей рабочей точки программы, если ее член name
. Я храню имена изображений немного по-другому в своем проекте.
Вышеприведенный код почти работает: я могу повторять по 4/5 изображениям в порядке, но когда отображается последнее изображение и нажата клавиша, изображение становится серым, и я не могу закрыть окно изображения с крахом остальной части приложения.
Моя первая идея заключалась в том, что из-за оптимизации времени компиляции cvReleaseImage
освобождает изображение до завершения cvDestroyWindow
и что-то заставляет его замораживать. Но я попытался добавить некоторое время ожидания (отсюда прокомментировал строку sleep(1)
моего кода), и это не помогло.
Я вызываю эту функцию отображения из своего консольного приложения, и когда изображение замерзает, элемент управления возвращается обратно в мое приложение, и я могу продолжать использовать его (но окно изображения все еще заморожено в фоновом режиме).
Можете ли вы дать мне какие-либо предложения о том, как исправить это?
ИЗМЕНИТЬ
Я разговаривал с некоторыми людьми, занимающимися компьютерным видением и OpenCV на регулярной основе, начиная с вопроса, и до сих пор нет идей.
Я также нашел аналогичный вопрос stackoverflow, но ответа по-прежнему нет. В результате Google просто дает похожие вопросы, но ответов нет.
Любые идеи о том, что попробовать (даже если они не являются полным решением), очень ценятся.