初步了解C#版图像处理库emgucv

这篇具有很好参考价值的文章主要介绍了初步了解C#版图像处理库emgucv。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Emgu CV是OpenCV图像处理库的跨平台.Net包装器。允许从.NET兼容语言(C#,VB,VC ++,IronPython等)调用OpenCV函数。

网上下一个示例程序,运行如下;

可以把人脸识别出来提取到右侧;我试了一下不是所有的情况都能识别;

c# emgu.cv,.Net,图像处理和识别,图像处理,opencv

大概看一下代码;

c# emgu.cv,.Net,图像处理和识别,图像处理,opencv 

packages目录下包含emgucv的库;

c# emgu.cv,.Net,图像处理和识别,图像处理,opencv 

代码中包含一个xml文件,是人脸识别的模板文件;

c# emgu.cv,.Net,图像处理和识别,图像处理,opencv 

需要的dll;

c# emgu.cv,.Net,图像处理和识别,图像处理,opencv 

 代码;

using Emgu.CV;
using Emgu.CV.Structure;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CV
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            OpenFileDialog openFileDialog1 = new OpenFileDialog();     //显示选择文件对话框
            openFileDialog1.Filter = "图片文件 (*.jpg)|*.jpg|All files (*.*)|*.*";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                var file = openFileDialog1.FileName;          //显示文件路径
                this.pictureBox1.ImageLocation = file;
                PicSet(file);
            }
        }

        private void Pic(Bitmap bitmap)
        {
            PictureBox pic = new PictureBox();
            pic.Image = Image.FromHbitmap(bitmap.GetHbitmap());
            pic.Size = new Size(103, 103);
            pic.Name = DateTime.Now.Ticks.ToString();
            pic.BackgroundImageLayout = ImageLayout.Stretch;
            pic.SizeMode = PictureBoxSizeMode.StretchImage;
            flowLayoutPanel1.Controls.Add(pic);
        }



        public void PicSet(string file)
        {
            var face = new CascadeClassifier("haarcascade_frontalface_alt.xml");
            //加载要识别的图片
            var img = new Image<Bgr, byte>(file);
            var img2 = new Image<Gray, byte>(img.ToBitmap());
            //把图片从彩色转灰度
            CvInvoke.CvtColor(img, img2, Emgu.CV.CvEnum.ColorConversion.Bgr2Gray);
            //亮度增强
            CvInvoke.EqualizeHist(img2, img2);
            //在这一步就已经识别出来了,返回的是人脸所在的位置和大小
            var facesDetected = face.DetectMultiScale(img2, 1.1, 10, new Size(50, 50));
            //循环把人脸部分切出来并保存
            int count = 0;
            var b = img.ToBitmap();
            foreach (var item in facesDetected)
            {
                count++;
                var bmpOut = new Bitmap(item.Width, item.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
                var g = Graphics.FromImage(bmpOut);
                g.DrawImage(b, new Rectangle(0, 0, item.Width, item.Height), new Rectangle(item.X, item.Y, item.Width, item.Height), GraphicsUnit.Pixel);
                g.Dispose();
                Pic(bmpOut);
                bmpOut.Save($"{count}.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                bmpOut.Dispose();
            }
            if (facesDetected.Length < 1)
            {
                this.label1.Text = "识别结果:0";
            }
            else {
                this.label1.Text = "识别结果:"+ facesDetected.Length;
            }

            //释放资源退出
            b.Dispose();
            img.Dispose();
            img2.Dispose();
            face.Dispose();
        }
        
    }
}

基本的人脸识别比较简单,库已经做了大多数事情;

包含相关命名空间,

加载人脸识别模板文件,

     var face = new CascadeClassifier("haarcascade_frontalface_alt.xml");

再调用几个函数就可以了;

看一下xml的模板文件,这是库提供的;

c# emgu.cv,.Net,图像处理和识别,图像处理,opencv

c# emgu.cv,.Net,图像处理和识别,图像处理,opencv 

c# emgu.cv,.Net,图像处理和识别,图像处理,opencv 

         里面是一些看上去是系数的东西;这是以一定数量的人脸数据经人工智能训练得来的;我也不知道是啥;大概是嘴巴的宽度、眼睛的大小、嘴巴到鼻子的距离、鼻子到眼睛的距离一类的东西;

它的官网;

https://www.emgu.com/wiki/index.php/Main_Page
https://www.emgu.com/wiki/index.php/Emgu_TF_License文章来源地址https://www.toymoban.com/news/detail-649733.html

到了这里,关于初步了解C#版图像处理库emgucv的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • open cv学习 (五) 图像的阈值处理

    demo1 demo2 demo3 demo4 demo5 demo6 demo7 demo8

    2024年02月12日
    浏览(26)
  • 【CV学习笔记】图像预处理warpaffine

    在学习图像预处理的时候发现,之前用的图像预处理方法一般为 resize和letter box,这两种方法比较低效,后来在手写AI中接触到了warpaffine,只需要一步就能够对图像进行预处理,同时还能很方便的进行cuda加速,于是便记录下来。 欢迎正在学习或者想学的CV的同学进群一起讨论与

    2023年04月08日
    浏览(37)
  • Open CV 图像处理基础:(五)Java 使用 Open CV 的绘图函数

    使用 Open CV 在 Java 中对图片使用绘图函数,分别绘制矩形、斜线、圆形、椭圆形以及添加文本 绘制矩形 参数说明: Mat img: 要绘制矩形的图像。 Point pt1: 矩形的一个顶点。 Point pt2: 与 pt1 相对的矩形的另一个顶点(不是矩形的对角线上的相邻顶点)。 Scalar color: 矩形的颜色。

    2024年02月02日
    浏览(38)
  • 数字图像处理 --- 相机的内参与外参(CV学习笔记)

    Pinhole Camera Model(针孔相机模型)         针孔相机是一种没有镜头、只有一个小光圈的简单相机。 光线穿过光圈并在相机的另一侧呈现倒立的图像。为了建模方便,我们可以把 物理成像平面 (image plane)上的图像移到 实际场景 (3D object)和 焦点 (focal point)之间,把他想象成

    2024年02月12日
    浏览(30)
  • opencv 31-图像平滑处理-方框滤波cv2.boxFilter()

    方框滤波(Box Filtering)是一种简单的图像平滑处理方法,它主要用于去除图像中的噪声和减少细节,同时保持图像的整体亮度分布。 方框滤波的原理很简单:对于图像中的每个像素,将其周围的一个固定大小的邻域内的像素值取平均,然后将这个平均值赋值给当前像素。这

    2024年02月14日
    浏览(32)
  • 图像平滑处理:cv::filter2D()函数详解

    cv::filter2D 函数可以对图像进行线性滤波。 函数可以对图像进行线性滤波。该函数使用指定的卷积核对输入图像进行卷积,以计算输出图像中每个像素的值。 该函数的原型如下: 其中, src 参数表示输入图像, dst 参数表示输出图像, ddepth 参数表示输出图像的深度, kernel 参

    2024年02月11日
    浏览(30)
  • opencv-34 图像平滑处理-双边滤波cv2.bilateralFilter()

    双边滤波(BilateralFiltering)是一种图像处理滤波技术,用于平滑图像并同时保留边缘信息。与其他传统的线性滤波方法不同,双边滤波在考虑像素之间的空间距离之外,还考虑了像素之间的灰度值相似性。这使得双边滤波能够有效地去除噪声,同时保持图像的细节和边缘。

    2024年02月14日
    浏览(27)
  • Open CV 图像处理基础:(六)在Java中使用 Open CV进行图片翻转和图片旋转

    在Java中使用OpenCV进行图片翻转和旋转是一种基本的图像处理技术,广泛应用于计算机视觉、图像编辑和人工智能领域。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它提供了许多常见的图像处理和分析功能,旨在为实时的图像处理提供高效

    2024年02月01日
    浏览(35)
  • opencv 30 -图像平滑处理01-均值滤波 cv2.blur()

    图像平滑处理(Image Smoothing)是一种图像处理技术,旨在减少图像中的噪声、去除细节并平滑图像的过渡部分。这种处理常用于预处理图像,以便在后续图像处理任务中获得更好的结果。 常用的图像平滑处理方法包括: 均值滤波(Mean Filtering) :用图像中像素周围区域的平

    2024年02月01日
    浏览(28)
  • opencv(15) 图像平滑处理之二:cv2.GaussianBlur()高斯滤波

    高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。 高斯模板是通过对二维高斯函数进行采样(高斯模糊的卷积核里的数值满足高斯分布)、量化并归一化得到的,它考虑了邻域像素位置的影响,距离当前被平滑像素越近的点,加权系数越大

    2024年02月10日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包