Quantcast
Channel: OpenCV Q&A Forum - RSS feed
Viewing all articles
Browse latest Browse all 41027

std::thread & imshow() - no windows created

$
0
0
Hi dears, First of all, thanks for your time :). I'm trying to create thread (yes I know, multi-thread is bad however I'd like to experiment) in which I would display an image. I have read OpenCV doesn't handle very much the threading and for some people, the window creation has to be done in **main** thread. So that's what I did. int main(int argc, const char * argv[]) { bool success(true), ihm_run(true); Drone_Controller drone; Vision_Manager vision(drone); success = drone.connect(); if (!success) return EXIT_FAILURE; cv::namedWindow("Display & Command", CV_WINDOW_AUTOSIZE); drone.enable_video_stream(); vision.ihm_start(&ihm_run); while (ihm_run) { if (ihm.get_key_pressed == 27) { ihm_run = false; } } vision.stop_ihm(); } Now I have a class named **Vision_manager** with the following *vision_manager.h* : class Vision_Manager { public: /* ------ CONSTRUCTEUR & DESTRUCTEUR ------ */ Vision_Manager(Drone_Controller& drone); ~Vision_Manager(); /* ------ FONCTIONS MEMBRES UTILISABLES DANS LE MAIN ------ */ void video_controls(); //Affiche la vidéo et récupère les entrées clavier char get_key_pressed(); void ihm_start(bool *m_IHMRun); void ihm_stop(); private: /* ------ ATTRIBUTS ------ */ Drone_Controller& m_drone; cv::Mat m_picture_rgb; char m_key_pressed; bool *m_IHMRun; //Déclaration du thread utilisé pour l'ihm std::thread m_ihm_thread; }; and vision_manager.c : #include "vision_manager.hpp" Vision_Manager::Vision_Manager(Drone_Controller& drone) : m_drone(drone) { } Vision_Manager::~Vision_Manager() { cv::destroyAllWindows(); } void Vision_Manager::ihm_start(bool *IHMRun) { m_ihm_thread = std::thread(&Vision_Manager::video_controls, this); //&Vision_Manager::video_controls, this, N m_IHMRun = IHMRun; } void Vision_Manager::ihm_stop() { m_ihm_thread.join(); std::cout << "Jointure effectuée" << std::endl; } void Vision_Manager::video_controls() { int picture_nb; //Créationde la fenêtre //cv::namedWindow("Affichage & Commandes", CV_WINDOW_AUTOSIZE); picture_nb = m_drone.get_picture_nb(); while (*m_IHMRun == true) { // Si l'initialitasion du stream n'a pas plantée et que l'image qu'on récupère est différente de celle d'avant if (m_drone.get_picture_nb() != picture_nb) { // On récupère l'image m_picture_rgb = m_drone.get_picture(); picture_nb = m_drone.get_picture_nb(); // Test si l'image a bien été récupérée if (m_picture_rgb.empty()) { //Si elle est vide ça ne sert à rien (typiquement en début de programme) std::cout << "Image vide \n"; } else { //Affichage de l'image avec le niveau de batterie cv::imshow("Affichage & Commandes", m_picture_rgb); std::cout << "ImShow OpenCV" << std::endl; } } m_key_pressed = cv::waitKey(50); } cv::destroyWindow("Affichage & Commandes"); } char Vision_Manager::get_key_pressed() { return m_key_pressed; } Everything is compiling and the thread is created as I see the prompts. **However I do not have any window.** Does anyone know ? Thanks again for your help :).

Viewing all articles
Browse latest Browse all 41027

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>