Tôi đang thực hiện dự án tìm kiếm thông qua cơ sở dữ liệu hình ảnh và khi tôi tìm thấy kết quả cho một số truy vấn - 5 hình ảnh cơ sở dữ liệu, tôi muốn hiển thị kết quả trực quan. Tôi không giữ tất cả các hình ảnh trong bộ nhớ, vì vậy tôi đã tải hình ảnh đầu tiên để hiển thị nó.OpenCV - đóng cửa sổ hiển thị hình ảnh
Tôi có một cái gì đó đơn giản trong tâm trí, trong giả:
for image 1..5
load images
display image in a window
wait for any keypress
close the window
Dưới đây là một đoạn mã của tôi trong C++
sử dụng OpenCV
cho mục đích này:
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);
}
Mảng images
sử dụng ở đây không như như vậy tồn tại trong mã của tôi, nhưng vì lợi ích của câu hỏi, nó chứa Tên tệp của các hình ảnh liên quan đến điểm chạy chương trình hiện tại nếu thành viên name
của nó. Tôi lưu trữ tên hình ảnh một chút khác nhau trong dự án của tôi.
Mã ở trên gần như hoạt động: Tôi có thể lặp qua 4/5 hình ảnh OK, nhưng khi hình ảnh cuối cùng được hiển thị và nhấn một phím, hình ảnh sẽ chuyển sang màu xám và tôi không thể đóng cửa sổ hình ảnh. ứng dụng của tôi.
Ý tưởng đầu tiên của tôi là do tối ưu hóa thời gian biên dịch, cvReleaseImage
giải phóng hình ảnh trước khi cvDestroyWindow
kết thúc và bằng cách nào đó làm cho nó bị đóng băng. Nhưng, tôi đã thử thêm một số thời gian chờ đợi (do đó nhận xét ra sleep(1)
dòng mã của tôi) và nó đã không giúp đỡ.
Tôi đang gọi chức năng hiển thị này từ ứng dụng bảng điều khiển của mình và khi hình ảnh bị đóng băng, điều khiển sẽ trả về ứng dụng của tôi và tôi có thể tiếp tục sử dụng nó (nhưng cửa sổ hình ảnh vẫn bị đóng băng trong nền).
Bạn có thể cho tôi bất kỳ đề xuất nào về cách sửa lỗi này không?
EDIT
Tôi đã nói chuyện với một số người đối phó với computer vision và OpenCV một cách thường xuyên kể từ khi đặt ra câu hỏi, và vẫn không có ý tưởng.
Tôi cũng đã tìm thấy một số stackoverflow question tương tự, nhưng vẫn không có câu trả lời được chấp nhận. Googleing chỉ cung cấp các câu hỏi tương tự như vậy, nhưng không có câu trả lời.
Bất kỳ ý tưởng nào về những gì cần thử (ngay cả khi chúng không phải là giải pháp hoàn chỉnh) đều được đánh giá rất cao.
bạn có thể cho chúng tôi biết gì về mảng hình ảnh? bạn có thể gửi mã tạo và gán của nó không? BTW bạn gắn thẻ này là C++ vậy tại sao bạn sử dụng kiểu C cũ của opencv? – Boaz
Kiểu C của OpenCv là vì tôi phải sử dụng thư viện C sử dụng OpenCV với mã của tôi và một số dữ liệu trong cấu trúc dữ liệu OpenCV kiểu C. Si này thực sự là một đoạn mã lớn hơn nhiều, và tôi truy cập vào tên của hình ảnh của tôi rất khác nhau. Vì lợi ích của câu hỏi, mảng ảnh chứa filepaths cho ảnh trong thành viên .name (tôi sẽ cập nhật câu hỏi) – penelope
Bạn đã thử 'cvDestroyAllWindows()' chưa? Nếu vậy, và nó không hoạt động sau đó có một lỗi lạ hoặc trong mã của bạn một nơi nào đó (có thể không phải ở trên) hoặc trong OpenCv. Nếu nó hoạt động có một lỗi đơn giản ở đâu đó. – Florian