Main camera processing loop for a desktop app
If you
want to display a GUI window on the screen using OpenCV, you call cv::imshow()
for each image, but you must also call cv::waitKey()
once per frame, otherwise your windows will not update at all! Calling cv::waitKey(0)
waits indefinitely until the user hits a key in the window, but a positive number such as waitKey(20)
or higher will wait for at least that many milliseconds.
Put this main loop in main_desktop.cpp
, as the basis for your real-time camera app:
while (true) { // Grab the next camera frame. cv::Mat cameraFrame; camera >> cameraFrame; if (cameraFrame.empty()) { std::cerr << "ERROR: Couldn't grab a camera frame." << std::endl; exit(1); } // Create a blank output image, that we will draw onto. cv::Mat displayedFrame(cameraFrame.size(), cv::CV_8UC3); // Run the cartoonifier filter on the camera frame. cartoonifyImage(cameraFrame, displayedFrame); // Display the processed image onto the screen. imshow("Cartoonifier", displayedFrame); // IMPORTANT: Wait for at least 20 milliseconds, // so that the image can be displayed on the screen! // Also checks if a key was pressed in the GUI window. // Note that it should be a "char" to support Linux. char keypress = cv::waitKey(20); // Need this to see anything! if (keypress == 27) { // Escape Key // Quit the program! break; } }//end while