c#调用halcon写一个根据鼠标获得当前坐标灰度值的程序
来源:互联网 发布:淘宝网找新疆核桃 编辑:程序博客网 时间:2024/05/29 10:25
开始写这个博客是为了将学习c#、halcon和图像处理过程中得到的一些小见解小感悟记录下来。本文介绍的是c#调用halcon空间,得到当前鼠标位置灰度值的小程序。首先在这里默认看这文章的都是已经掌握了halcon和c#联合编程的基础知识,如果不清楚请参考查阅其它相关文章。
要实现鼠标获取当前位置灰度值,首先基本思路是:在窗体中添加halcon的窗体,用于读图显示,再添加MouseDown事件来获取当前坐标值,利用得到的坐标值代入halcon的GetGrayval算子中得到灰度值。结果如下:
一切看起来顺风顺水没什么困难。由于上面的程序只是处理单一固定图片的,于是我想改成能获取任意图片灰度值的程序,就添加了个读取文件的控件OpenFileDialog。然后就出现问题了,主要问题有两个:一是由于不同图片的大小不同,所以显示的图片可能会不铺满窗体:
二是在鼠标移动获取灰度值的时候,会出现下面的错误:
首先问题一是因为图片尺寸和预设的窗体大小不同而出现,解决方法是获取图像大小,再调用更改窗体尺寸的算子,这样图片显示就没问题了。需要注意的是,这里需要同时使用这些算子:
HOperatorSet.GetImageSize(image, out X, out Y);
hWindowControl1.Size = new System.Drawing.Size(X,Y);
hWindowControl1.ImagePart = new System.Drawing.Rectangle(0, 0, X, Y);
如果只使用hWindowControl1.Size = new System.Drawing.Size(X, Y);,那么设置的是窗口的大小,还是不能铺满窗口;如果只使用hWindowControl1.ImagePart = new System.Drawing.Rectangle(0, 0, X, Y);,则设置的是窗口中画布的大小,图像会铺满窗口导致变形。所以需要一起使用,使得窗口大小和画布大小一致,使显示效果和原图一致。
然而这时候,问题二的#1301错误还是存在,最后发现,原来在如下代码出现了问题:
row = (int)e.X;
col = (int)e.Y;
HOperatorSet.GetGrayval(image, row, col, out grayval);
原来是程序中鼠标点击获得的X、Y坐标,和GetGrayval算子的到的行row,列col的对应关系有问题,我开始以为是X→row,Y→col,原来正确的对应关系是:
X→col,Y→row,希望各位注意。
最后我的程序效果如下:
附上部分代码:
//读图 private void button2_Click(object sender, EventArgs e) { HTuple X = new HTuple(); HTuple Y = new HTuple(); OpenFileDialog file = new OpenFileDialog(); file.Filter = "|*.bmp; *.png; *.jpg"; if (file.ShowDialog() == DialogResult.OK) { adr = file.FileName; HObject image; HOperatorSet.ReadImage(out image, adr); HOperatorSet.GetImageSize(image, out X, out Y); hWindowControl1.Size = new System.Drawing.Size(X,Y); hWindowControl1.ImagePart = new System.Drawing.Rectangle(0, 0, X, Y); HOperatorSet.DispObj(image, hWindowControl1.HalconWindow); flag = true; } } //清空窗口 private void button3_Click(object sender, EventArgs e) { HOperatorSet.ClearWindow(hWindowControl1.HalconWindow); flag = false; } //鼠标点击获取灰度值 private void hWindowControl1_HMouseDown(object sender, HMouseEventArgs e) { if (flag) { HTuple X = new HTuple(); HTuple Y = new HTuple(); HObject image; HTuple row = new HTuple(); HTuple col = new HTuple(); HTuple grayval = new HTuple(); HOperatorSet.ReadImage(out image, adr); HOperatorSet.GetImageSize(image, out X, out Y); hWindowControl1.Size = new System.Drawing.Size(X, Y); hWindowControl1.ImagePart = new System.Drawing.Rectangle(0, 0, X, Y); row = (int)e.X; col = (int)e.Y; HOperatorSet.GetGrayval(image, col,row , out grayval); MessageBox.Show("当前坐标: X:" + row.ToString() + " Y: " + col.ToString() + " 灰度值 " + grayval.ToString()); } }
希望对大家有一点点启发或者帮助。另外我想问问怎么上传附件,源程序想上传不知道怎么弄。
- c#调用halcon写一个根据鼠标获得当前坐标灰度值的程序
- 获得当前鼠标的坐标
- C# 获得当前鼠标的屏幕中间坐标(c#)
- 如何获得当前鼠标的坐标。
- 一个获取当前鼠标坐标和颜色rgb值的小程序
- javascript获得鼠标的坐标值
- 自己写的一个根据polyline生成顶点坐标表格的程序!
- C#如何获取鼠标相对当前窗口的坐标
- C#如何获取鼠标相对当前窗口的坐标
- js获得鼠标的坐标
- winform 获得鼠标的坐标
- winfrom获得鼠标的坐标
- 获取当前鼠标的坐标
- C#中获得系统当前鼠标的图案
- C# 获得桌面分辨率、窗口当前坐标
- C# 获得桌面分辨率、窗口当前坐标
- javaScript小问题,托拽元素,获得当前鼠标的坐标
- 获得本页内鼠标的坐标值
- 选择排序
- 《deep learning》学习笔记(1)——引言
- vue-仿手机qq的demo
- AI学习的一篇转载
- unity3d 预制体
- c#调用halcon写一个根据鼠标获得当前坐标灰度值的程序
- Websocket 入门学习实例
- 短信营销的优势
- CSS气泡框的两种实现
- 简单字符驱动的头文件讲解
- xargs的原理剖析及用法详解
- ffmpeg中的时间 DTS、PTS、AV_TIME_BASE、AV_TIME_BASE_Q 介绍
- 无语!苹果频繁弹窗:iOS 10设备都要升iOS 11
- linux下syscall函数