『HDevelop』という開発環境を提供されており、サンプルが充実しているが、どれがどれか分からない。。。
ネットで調べてもやりたい事が分かりづらい。。。
そんなことは自分だけかもしれませんが、今日は『白黒画像(グレースケール画像)を作る』をしてみたいと思います。
今回使用する関数
下記、関数を使います。
HOperatorSet.Rgb1ToGray(HObject, out HObject);
引数の簡単な説明は、下記の通り
第1引数:入力画像(カラー画像) 第2引数:出力画像(グレー画像)
サンプルを作ってみる
今回も簡単に画像を作ってみようと思います。
操作画面
いつものことながら、画像を選択してもらって、選択された画像を表示します。
そして、【グレー画像】ボタン(btnGray)をクリックされたら、表示されている画像をグレースケールに変換して表示します。
定義
まずはNameSpaceの設定として、
using HalconDotNet;
次に共通で使える変数として、下記を定義します。
HObject DispOrgImg = null; //読み込んだ画像
const double DEF_W = 640.0;
const double DEF_H = 480.0;
処理
今回はbtnGrayのクリックイベントの処理を紹介します。
(読込ボタンはいつも紹介しているので最後に補足で紹介)
private void btnGray_Click(object sender, EventArgs e)
{
if (DispOrgImg == null) return; //読み込んでいるかどうか
//現在表示されている画像をグレースケールに変換
HOperatorSet.Rgb1ToGray(DispOrgImg, out HObject grayImg);
//Zoom方式で表示
HTuple hwndOrg = hWindowControl1.HalconWindow;
DispZoom(hwndOrg, grayImg);
}
実行結果
まとめ
グレースケール画像にする関数を紹介させてもらいました。
カラー画像からグレー画像の変換は、関数1つで出来るでとても簡単でした。
ただ、その関数を調べるまでがとても大変でした。。。
使用するタイミングとしては、パタンマッチングです。
パタンマッチングはカラー画像ではできない為、グレー画像に変換する必要があります。
補足(作った関数の紹介)
■ファイル選択
private DialogResult SelectImageFile(out string fp)
{
fp = "";
OpenFileDialog ofd = new OpenFileDialog();
ofd.FileName = "";
ofd.InitialDirectory = @"C:\";
ofd.Filter = "画像ファイル(*.png;*.jpg)|*.png;*.jpg";
ofd.Title = "開くファイルを選択してください";
DialogResult res = ofd.ShowDialog();
if (res == DialogResult.OK) fp = ofd.FileName;
return res;
}
■画像サイズの比率を変えずに表示枠いっぱいに表示する
private void DispZoom(HTuple windowhandle, HObject img)
{
//Zoom方式で表示
HOperatorSet.GetImageSize(img, out HTuple w, out HTuple h);
double rateR = DEF_H / h, rateC = DEF_W / w;
double rate = (rateR < rateC) ? rateR : rateC;
double c1 = -((DEF_W / rate) - w) / 2;
double c2 = c1 + (DEF_W / rate);
double r1 = -((DEF_H / rate) - h) / 2;
double r2 = r1 + (DEF_H / rate);
HOperatorSet.SetPart(windowhandle, r1, c1, r2, c2);
HOperatorSet.DispObj(img, windowhandle);
}
■読込ボタンをクリックされた時の処理
private void btnReadImg_Click(object sender, EventArgs e)
{
//初期化
DispOrgImg = null;
//表示削除
HTuple hwndOrg = hWindowControl1.HalconWindow;
HOperatorSet.ClearWindow(hwndOrg);
//画像を選択してもらう
if (SelectImageFile(out string fp) == DialogResult.OK)
{
//画像読込
HOperatorSet.ReadImage(out HObject img, fp);
DispOrgImg = img;
//Zoom方式で表示
DispZoom(hwndOrg, img);
}
}
業務でプログラミング(C#/VB/Python)を作っている。
挫折を何回も繰り返し、幾度の壁を乗り越えてきた。
乗り越えてきた事を忘れないように記録に残す。
同じ思いをしている人への情報提供になれたらと思う。
基本は初心者に向けたプログラムの情報を提供する。
コメント
日本に住んでいるベトナムのズオンといいます。ありがとうございます。助かります。今後、 C#にてHalconでの処理プログラムをたくさん書いてください。
ズオン様 参考になって嬉しく思います。頑張って書いていきます。