让代码更简单

C#+EmguCV实现图像灰度化二值化

重要:本文最后更新于2020-03-22 09:26:03,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

前面已经学习过EmguCV读取、显示、保存图像,如何使用C#与EmguCV实现图像灰度化二值化呢?灰度图像能让图像处理起来更简单,二值化能剔除很多干扰,下面一起来看看C#+EmguCV实现图像灰度化二值化的代码。也是OpenCV中Threshold函数的使用。

C#+EmguCV实现图像灰度化二值化

C#+EmguCV实现图像灰度化二值化

实现步骤

建立工程

如何使用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)的算法速度真的快,拖动滑块居然没感觉到卡顿。

感觉很棒!可以赞赏支持我哟~

0 打赏

评论 (0)

登录后评论
QQ咨询 邮件咨询 狗哥推荐