Visual Studio 2013 Express Visual C++( アンマネージドコード ) OpenCV 3.1 |
■262.OpenCV 塗りつぶし | Prev Top Next | |
|
今回はマウスクリックしたピクセルとその連結部分、つまり色の差が許容範囲内の色を塗りつぶします。
#include <iostream> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #pragma comment( lib, "opencv_world300d.lib" ) void onMouse(int event, int x, int y, int flags, void* param) { cv::Mat* dst = (cv::Mat* )param; int ret; switch (event) { case CV_EVENT_LBUTTONDOWN: // 左ボタンが押された // 指定された色で連結成分を塗りつぶす( マスクは使用しない ) ret = cv::floodFill(*dst, cv::Point(x, y), // 指定した座標を塗りつぶしの開始地点 cv::Scalar(128), // 塗りつぶす色 nullptr, cv::Scalar(10) , // 輝度値/色の差の許容下限値.この範囲内のピクセルを塗りつぶす. cv::Scalar(10), // 輝度値/色の差の許容上限値.この範囲内のピクセルを塗りつぶす. 4 | cv::FLOODFILL_FIXED_RANGE // 4近傍 | これが指定されている場合,現在のピクセルとシードピクセルとの間の差だけが考慮されます ); // 2値化画像をウィンドウに表示 imshow("塗りつぶし", *dst); break; } } int main(int argc, const char* argv[]) { int hr = -1; try { cv::Mat src, dst; // 8ビット,シングルチャンネルの入力画像のためグレースケールで読み込む src = cv::imread("D:/TEMP/MaverickProj/Image/OpenCV/24/Texture.png", cv::IMREAD_GRAYSCALE); // 2値化 cv::adaptiveThreshold(src, // 8ビット,シングルチャンネルの入力画像. dst, 255, // 2値化画像を作成する際の0以外の色。 cv::ADAPTIVE_THRESH_GAUSSIAN_C, // 近傍の平均値を計算する際に使用するアルゴリズム.ADAPTIVE_THRESH_MEAN_C または ADAPTIVE_THRESH_GAUSSIAN_C. cv::THRESH_BINARY, // 閾値の種類. THRESH_BINARY または THRESH_BINARY_INV のどちらか. 7, // ピクセルの閾値を求めるために利用される近傍領域のサイズ.3, 5, 7, など. 2 // 平均または加重平均から引かれる定数.この値により maxValue となる色の範囲が変わる. ); // 元画像表示用のウィンドウ作成 cv::namedWindow("Source", 1); // 元画像をウィンドウに表示 imshow("Source", src); // 2値化画像表示用のウィンドウ作成 cv::namedWindow("塗りつぶし", 1); // マウスイベント cv::setMouseCallback("塗りつぶし", onMouse, (void*)&dst); // 2値化画像をウィンドウに表示 imshow("塗りつぶし", dst); cv::waitKey(0); hr = 0; } catch (cv::Exception ex) { std::cout << ex.err << std::endl; } // ウィンドウの破棄 cv::destroyAllWindows(); return hr; }元画像
塗りつぶし( グレー箇所 )