开发环境:
1.windows7 64位;
2.vs community 2017;
3.Emgu3.4.1;
软件安装:
官方下载Emgu3.4.1点击打开链接,下载后安装好即可。
编程设置:
1.打开vs,新建一个vs console项目。
2添加引用(Emgu.CV.UI、Emgu.CV.UI.GL、Emgu.CV.Word),从Emgu的安装目录下
E:\Emgu\emgucv-windesktop 3.4.1.2976\bin导入。然后再设置项目属性,我的系统为64位,需要将生成->
平台目标->Any CPU改成64位。
程序例子:
1.图片操作的代码
using System.Drawing;
using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.CV.CvEnum;
using Emgu.Util;
namespace _000ConsoleApp
{
class Program
{
static void Main(string[] args)
{
//载入图片
Mat srcImage = CvInvoke.Imread(@"I:\CSHARP\EmguLearn\JPG\a.jpg");
CvInvoke.Imshow("Image", srcImage);
//图像侵蚀处理
Mat element = CvInvoke.GetStructuringElement(Emgu.CV.CvEnum.ElementShape.Rectangle , new Size(15, 15), new Point(-1, -1));
var dstImage = new Image<Bgr, byte>(srcImage.Size);
CvInvoke.Erode(srcImage, dstImage, element, new Point(-1, -1), 1, BorderType.Default, new MCvScalar());
//显示图片
CvInvoke.Imshow("ErodeImage", dstImage);
//模糊处理
var dstImage2 = new Image<Bgr, byte>(srcImage.Size);
CvInvoke.Blur(srcImage, dstImage2,new Size(7, 7), new Point(-1, -1));
CvInvoke.Imshow("BlurImage", dstImage2);
//canny边缘检测
Mat dstImage3 = new Mat();
Mat edge = new Mat();
Mat grayImage = new Mat();
dstImage3.Create(srcImage.Width, srcImage.Height, DepthType.Cv8S, srcImage.NumberOfChannels);
CvInvoke.CvtColor(srcImage, grayImage, ColorConversion.Bgr2Gray); //将图片转为灰度
CvInvoke.Blur(grayImage, edge, new Size(3, 3), new Point(-1, -1)); //模糊化处理灰度图片,Size(3,3)表示内核为3x3,point(-1,-1)表示从中心开始
CvInvoke.Canny(edge, edge, 3, 9); //边缘检测
CvInvoke.Imshow("CannyImage", edge); //将"CannyImage"改为"边缘检测"时,标题框会出现乱码
srcImage.Dispose();
CvInvoke.WaitKey();
}
}
}
在使用Imshow时,第一个参数使用汉字字符串时会出现乱码,这个待解决
2.视频读取
using System.Drawing;
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.Util;
namespace _001VideoCaptureConsoleApp
{
class Program
{
static void Main(string[] args)
{
//VideoCapture videoCapture = new VideoCapture(@"I:\CSHARP\EmguLearn\MP4\2.mp4"); //获取一个视频文件
VideoCapture videoCapture = new VideoCapture(0); //获取本地视频
Mat edges = new Mat(); //Mat对象,图像文件存储
while (true)
{
Mat fram = new Mat(); //Mat对象,存储视频的每一帧
videoCapture.Read(fram); //读取视频到frame对象
// 边缘检测输出
CvInvoke.CvtColor(fram, edges, ColorConversion.Bgr2Gray); //BGR->Gray,灰度转换
CvInvoke.Blur(edges, edges, new Size(3, 3), new Point(-1, -1)); //降噪处理(模糊化),使用内核3x3
CvInvoke.Canny(edges, fram, 0, 30); //边缘检测,0、30是阈值,什么是阈值?
//如果播放视频,这样可以一直循环
if (fram.Width != 0 | fram.Height != 0)
{
CvInvoke.NamedWindow("Video", NamedWindowType.KeepRatio);
CvInvoke.Imshow("Video", fram);
}
else
videoCapture = new VideoCapture(@"I:\CSHARP\EmguLearn\MP4\2.mp4");
CvInvoke.WaitKey(30);
}
}
}
}