一、配置OpenCV
首先,我们新建一个工程,然后就是给这个工程配置OpenCV了,最简单的方法还是Nuget,来我们右键一个Nuget:
打开Nuget后,你可以直接输入OpenCVSharp4来查找,当然,如果你只是输入OpenCV那显示的选项足够使你眼花缭乱。这里我们还是直接一些输入OpenCVSharp4,直接安装箭头所指四个。
二、尝试调用OpenCV
第一个程序,我们暂时不做图形识别,这里就看看我们的opencv是否可以工作了,我们做一个图片灰度化的程序,首先记得引入OpenCvSharp
using OpenCvSharp;
private void button1_Click(object sender, EventArgs e)
{
String fname=String.Empty;
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
fname=ofd.FileName;
Mat mat = new Mat(fname);
Mat gmat = new Mat();
Cv2.CvtColor(mat, gmat, ColorConversionCodes.BGR2GRAY);
Cv2.ImShow(fname, gmat);
Cv2.WaitKey();
}
我们随意打开一张下载的图(一张arduino板子的图),给取了灰度化
三、初步处理
我们拿局部做一个处理,这里用Canny对轮廓进行识别,测试代码如下:
String fname=String.Empty;
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
fname=ofd.FileName;
if(fname!=String.Empty)
{
pictureBox1.Image =new Bitmap(fname);
Mat mat = new Mat(fname);
Mat gmat = new Mat();
Cv2.CvtColor(mat, gmat, ColorConversionCodes.BGR2GRAY);
Cv2.Canny(mat, gmat, 100, 200);
pictureBox2.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(gmat);
}
效果如下
到这里,我们的OpenCv算是开张了,后面的工作就是识别啦。
四、显示在PictureBox上
显示在picturebox控件上,并且让图片居中显示。注意,这里一定要安装OpenCVSharp4.Extensions,否则无法获得BitmapConverter.ToBitmap函数。
pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
pictureBox2.SizeMode = PictureBoxSizeMode.CenterImage;
pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
pictureBox2.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(gmat);
当然,现在这里的图片显示位置是固定的,对于观察识别的区域不太方便。