質問: 0; } cv::Mat Roi1(baseimage, cv::Rect(x, 0, img1.cols, img1.rows)); //画像の座標 Player1 img1.copyTo(Roi1); cv::imshow("test", baseimage); /* 画像の表示 */ } waitKey(0); /* 入力待機 */ return 0; } ``` ### 試したこと while文以外もfor文でも試しましたが結果は同じく動作が停止してしまいます。 ### 補足情報(言語/FW/ツール等のバージョンなど) 繰り返しの文が間違っているのか、また画像を表示させるが間違っているのか C++初心者なので、ぜんぜんわからない状態です。 改善点、修正点お願いします。
回答: OpenCVはあまり使ったことがないので、正確に理解しているわけではないのですが、 > > cv::namedWindow("test", CV_WINDOW_AUTOSIZE); > > > これはWhileループの手前に書くべきですね。リファレンスによると、すでに同じ名前のウィンドウがある場合は何もしないようなのでループの中に書いても問題にはなりませんが、無駄なので。 > > cv::imshow("test", baseimage); /* 画像の表示 */ > > > おそらく、これだけではWM_PAINTが処理されないために画像が表示されないのだと思われます。 というのも、cv::waitKeyの説明のところに、 > > 注意: この関数は,HighGUI においてイベントを取得して扱うための唯一の手段です.よって,実行環境がイベント処理を扱ってくれる場合を除けば,通常のイベント処理ではこの関数を周期的に呼び出す必要があります. > > > と書いてあります。したがって、 ``` cv::imshow("test", baseimage); cv::waitKey(1); ``` このように、`cv::imshow`の後で必ず`cv::waitKey(1)`を呼ぶようにすれば表示されると思います。