前提・実現したいこと
背景が白~灰色の紙に記載した赤色の検出をしています。
現在は色検出した矩形画像を、ヒストグラム化して判断していますが、十分な結果が得られていません。
1.色検出した矩形画像内の抽出範囲の中身の色判定をしたいです。
2.色判定で各部分のHSV各値を取得するにはどうすればよいでしょうか?
発生している問題・エラーメッセージ
HSVフィルタでは白線より上の範囲(色相は赤の範囲)設定してます。
用紙に記載するものが、赤鉛筆、ボールペン、サインペンなどが考えられ、
あまり「赤!」というイメージのところでの検出が出来ません。
検出結果に色の判定を行い、
両端の黄色の円の部分(黒味、白味が強いところ)が抽出された場合、
除外しようと思いまず。
図のような抽出画像をそのままヒストグラム化して、
先頭と最後の部分を除いた範囲で、各色の最大値(Y座標)と位置(X座標)から、赤色を判断しています。※他の色よりX座標が後ろで発生など。
しかし検出したい中には、上の様なヒストグラムをもつ画像も検出されることがあり、先述の方法では判断できず困っています。
そこで検出した画像(矩形)をそのままではなく、実際の輪郭の中身に関して
処理をしたく思いますが、輪郭までは取得できたものの、その後はどうしたらいいかわかりません。
該当するメソッドや方法等、ご教授いただけたらと思います。
該当のソースコード
C#
1//HSV設定 2//20, 255, 220 3//200, 64, 30 4 5//ヒストグラム計算 6Mat b_hist = new Mat(); 7Mat g_hist = new Mat(); 8Mat r_hist = new Mat(); 9Cv2.CalcHist(new Mat[] { img }, new int[] { 0 }, null, b_hist, 1, new int[] { 256 }, new Rangef[] { new Rangef(0, 256) }); 10Cv2.CalcHist(new Mat[] { img }, new int[] { 1 }, null, g_hist, 1, new int[] { 256 }, new Rangef[] { new Rangef(0, 256) }); 11Cv2.CalcHist(new Mat[] { img }, new int[] { 2 }, null, r_hist, 1, new int[] { 256 }, new Rangef[] { new Rangef(0, 256) }); 12 13//ヒストグラム抽出 14//正規化 15Cv2.Normalize(b_hist, b_hist, 0, histImage.Height, NormTypes.MinMax); 16Cv2.Normalize(g_hist, g_hist, 0, histImage.Height, NormTypes.MinMax); 17Cv2.Normalize(r_hist, r_hist, 0, histImage.Height, NormTypes.MinMax); 18
開発環境
C#(visualstudio2015)、OpenCV(OpenCVSharp3 v4.0.0.20181129)
回答1件
あなたの回答
tips
プレビュー