07Binarization.cppでは,閾値に固定値としてプログラム中に直接書き込んだ.一方,入力画像の状況は多様であり,ユーザがインタラクティブ(対話的)に閾値を変更できるようにしたい.そこで,下記の目的を達成するシステムを実装してください.
目的:トラックバー(スライダー)を取り付けて,ユーザが,マウスでインタラクティブに移動させて,閾値を変更させ,その2値化処理結果をリアルタイムに表示する.
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/highgui/highgui_c.h>
int main(int argc, char *argv[])
{
// 入力画像をグレースケールで取得
cv::Mat input_img = cv::imread("VRML.jpg", 0); //0と書くと自動的にグレースケール化
cv::Mat bin_img;
cv::namedWindow("Bin_img", CV_WINDOW_AUTOSIZE); // ウィンドウを作成
int thMax = 100; // トラックバーの初期値
cv::createTrackbar("Threshold", "Bin_img", &thMax, 255); // Bin_imgウィンドウにトラックバー作成
while (1) {
// グレースケール画像の2値化
cv::threshold(input_img, bin_img, thMax, 255, cv::THRESH_BINARY);
// 2値画像を画面に表示
imshow("Input_img", input_img);
imshow("Bin_img", bin_img);
int iKey = cv::waitKey(50);
if (iKey == 27) { break; } //Escキーで終了
}
return 0;
}