前回の記事で二値化をしました。使った関数はThreshold()ですが、出力されるデータがRegion(領域)というデータで画像ではありませんでした。
その為、今回はRegionを画像に変更したいと思います。
今回使用する関数
HOperatorSet.RegionToBin(HObject, out HObject, HTuple, HTuple, HTuple, HTuple)
使用する関数は、RegionToBin()という関数を使用します。
RegionをBinary(バイナリー)に変換するって意味ですかね?
引数は下記の通りです。
第1引数:入力データ(Regionデータ) 第2引数:出力画像 第3引数:閾値内のグレースケール(Regionを表示した時の白) 第4引数:閾値外のグレースケール(Regionを表示した時の黒) 第5引数:出力する画像サイズ(幅) 第6引数:出力する画像サイズ(高さ)
詳しい説明は下記リンクより
region_to_bin [HALCON Operator Reference / Version 13.0.4] (mvtec.com)
サンプルを作ってみる
前回の記事のままでボタンの処理だけを変更します。
その為、前回の記事を参考にしてください。
【C#】HALCON de 画像処理(二値化) | 育児パパの人生備忘録 (t19488sns.com)
操作画面
操作画面はそのままです。
定義
前回の記事を参考にして下さい。
処理
btnThresholdをクリックされたイベントの処理で、表示する部分を変更します。
今回は、画像に変換した後に表示するようにします。
private void btnThreshold_Click(object sender, EventArgs e)
{
if (DispOrgImg == null) return; //読み込んでいるかどうか
int lo = (int)nudLowerLimit.Value;
int hi = (int)nudUpperLimit.Value;
HOperatorSet.Threshold(DispOrgImg, out HObject _region, lo, hi);
//表示削除
HTuple hwnd = hWindowControl2.HalconWindow;
HOperatorSet.ClearWindow(hwnd);
//前回の分をコメントアウト
/*
//ImagePartをhWindowControl1と同じにする
HOperatorSet.SetPart(hwnd,
hWindowControl1.ImagePart.Top,
hWindowControl1.ImagePart.Left,
hWindowControl1.ImagePart.Bottom,
hWindowControl1.ImagePart.Right);
HOperatorSet.DispObj(_region, hwnd);
*/
//画像サイズ取得
HOperatorSet.GetImageSize(DispOrgImg, out HTuple w, out HTuple h);
//画像に変換する
int foreGray = 255;
int backGray = 0;
HOperatorSet.RegionToBin(_region, out HObject binImg, foreGray, backGray, w, h);
//画像を表示する。
DispZoom(hwnd, binImg);
}
Regionを表示した時の白が白になるようにforeGrayを255にしました。
このforeGrayの値を変更すると、白の部分がグレーや黒にすることが可能です。
また、Regionの結果を逆にしたい場合は、foreGray=0,backGray=255にすれば、白黒が逆になります。
また、画像のサイズを指定しないといけなかったので、現在表示している画像データから関数GetImageSize()を使って画像サイズをしゅとくしました。
実行結果
実行結果としては、前回と変わりません。
下記パタンを試しました。
■foreGray=128,backGray=0
■foreGray=255,backGray=128
まとめ
regionデータを画像データに変換しました。regionデータは[1 or 0]なのか、表示した時は白黒でしたが、画像データに変換する時は、regionデータの[1のグレー値][0のグレー値]を指定して画像に変換で切るっぽいですね。
他にもこのregionデータを活用できるか調べてみたいと思います。
補足
前回の記事を参照してください。
【C#】HALCON de 画像処理(二値化) | 育児パパの人生備忘録 (t19488sns.com)
業務でプログラミング(C#/VB/Python)を作っている。
挫折を何回も繰り返し、幾度の壁を乗り越えてきた。
乗り越えてきた事を忘れないように記録に残す。
同じ思いをしている人への情報提供になれたらと思う。
基本は初心者に向けたプログラムの情報を提供する。
コメント