前面已经学习过EmguCV读取、显示、保存图像,如何使用C#与EmguCV实现图像灰度化二值化呢?灰度图像能让图像处理起来更简单,二值化能剔除很多干扰,下面一起来看看C#+EmguCV实现图像灰度化二值化的代码。也是OpenCV中Threshold函数的使用。
实现步骤
建立工程
如何使用VS构建EmguCV项目我这里就不讲了,前面两篇文章都有提及,自己去看吧。
UI中使用了button、lable、imageBox、trackBar这四种控件。
C#代码
声明引用
using Emgu.CV; using Emgu.CV.Structure; using Emgu.CV.CvEnum; using Emgu.Util;
声明全局变量
Image<Gray, byte> grayimage;
这个全局变量是后面用来做动态二值化使用的,此变量类型为灰度图像。
选择图像按钮事件代码
OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog() == DialogResult.OK) { imageBox1.Image =new Image<Bgr, byte>(ofd.FileName); }
灰度化按钮事件代码
grayimage = new Image<Gray, byte>(imageBox1.Image.Bitmap); imageBox1.Image = grayimage;
这里将灰度化的图像赋值给全局变量,后面二值化使用。
trackBar改变事件代码
private void trackBar1_ValueChanged(object sender, EventArgs e) { label1.Text = trackBar1.Value.ToString(); double xjThreshold = trackBar1.Value; var xjImageBinaryzation = grayimage.CopyBlank(); CvInvoke.Threshold(grayimage, xjImageBinaryzation, xjThreshold, 255, ThresholdType.Binary); imageBox1.Image = xjImageBinaryzation; }
总结:EmguCV(OpenCV)的算法速度真的快,拖动滑块居然没感觉到卡顿。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/iot/241909.html