Emgu学习笔记---参照《OpenCV3编程入门》-第一章

这篇笔记介绍了在Windows7 64位系统中,使用Visual Studio Community 2017进行Emgu3.4.1的开发环境配置,包括软件安装、项目设置和程序示例,涉及图片操作和视频读取,但在使用Imshow时遇到汉字字符串乱码问题。
摘要由CSDN通过智能技术生成
开发环境:

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);
            }
        }
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值