大家都知道OpenCV是一个跨平台的机器视觉和机器学习的开源库,可以运行在Linux、Windows、Android和Mac OS操作系统上,由C++开发。

今天给大家介绍一个用C#对OpenCV封装的处理库。

项目简介

它是OpenCV的.NET封装版本,项目名称为EmguCV,它使得.NET开发人员能够调用OpenCV函数,从而快速建立复杂的视觉应用。EmguCV库包括视觉的许多领域,如工厂产品检验、医学影像、用户接口、摄像机标定、立体视觉和机器人等。

核心功能

  1. 图像处理:提供了各种图像处理功能,如图像滤波、二值化、色彩空间转换、图像增强等。

  2. 计算机视觉:支持各种计算机视觉算法,如特征提取、目标检测、跟踪、人脸识别等。

  3. 模式识别:提供了模式识别算法,如支持向量机(SVM)、随机森林等。

  4. 深度学习:支持深度学习算法,如卷积神经网络(CNN)、循环神经网络(RNN)等。

  5. OCR:可以结合Tesseract OCR引擎实现光学字符识别(OCR)功能,将图像中的文字转换为可编辑和可搜索的文本。

  6. 视频处理:提供了视频处理功能,如视频帧提取、视频编解码等。

  7. 几何变换:支持各种几何变换算法,如平移、旋转、缩放等。

  8. 图像分割:提供了各种图像分割算法,如基于阈值的分割、基于区域的分割等。

项目文件

项目特点

1、与OpenCV兼容:底层使用OpenCV库,因此它支持OpenCV的所有功能和算法。

2、高性能:通过高度优化的算法和底层优化,提供了高性能的图像处理和计算机视觉功能。

3、易于使用:提供了与.NET环境的无缝集成,使用者可以通过C#和VB等熟悉的编程语言来使用OpenCV的功能。

4、丰富的扩展:提供了许多扩展和示例,可以轻松地满足各种图像处理和计算机视觉需求。

使用示例

初始化

Tesseract ocr = new Tesseract(path, "eng.traineddata", OcrEngineMode.TesseractLstmCombined);

文字识别

ocr.SetImage(imageColor);

if (ocr.Recognize() != 0)
throw new Exception("Failed to recognizer image"); Tesseract.Character[] characters = ocr.GetCharacters();
if (characters.Length == 0)
{
Mat imgGrey = new Mat();
CvInvoke.CvtColor(image, imgGrey, ColorConversion.Bgr2Gray);
Mat imgThresholded = new Mat();
CvInvoke.Threshold(imgGrey, imgThresholded, 65, 255, ThresholdType.Binary);
ocr.SetImage(imgThresholded);
characters = ocr.GetCharacters();
imageColor = imgThresholded;
if (characters.Length == 0)
{
CvInvoke.Threshold(image, imgThresholded, 190, 255, ThresholdType.Binary);
ocr.SetImage(imgThresholded);
characters = ocr.GetCharacters();
imageColor = imgThresholded;
}
}
foreach (Tesseract.Character c in characters)
{
CvInvoke.Rectangle(imageColor, c.Region, drawCharColor.MCvScalar);
} return ocr.GetUTF8Text();

识别效果

项目地址

https://github.com/emgucv/emgucv

更多开源项目请查看一个专注推荐优秀.Net开源项目的榜单

最后推荐下,我现在正在编写教程:《.Net Core从零学习搭建权限管理系统教程》。

- End -

文章首发于公众号【编程乐趣】,欢迎大家关注。

一个C#跨平台的机器视觉和机器学习的开源库的更多相关文章

  1. 想要快速完成一个Python项目,离不开这些开源库

    链接:https://opensource.com/article/18/9/python-libraries-side-projects 在Python / Django世界中有一句话:我们为语言而 ...

  2. Kubernetes入门(四)——如何在Kubernetes中部署一个可对外服务的Tensorflow机器学习模型

    机器学习模型常用Docker部署,而如何对Docker部署的模型进行管理呢?工业界的解决方案是使用Kubernetes来管理.编排容器.Kubernetes的理论知识不是本文讨论的重点,这里不再赘述, ...

  3. Metalama简介1. 不止是一个.NET跨平台的编译时AOP框架

    Metalama是一个基于微软编译器Roslyn的元编程的库,可以解决我在开发中遇到的重复代码的问题.但是其实Metalama不止可以提供编译时的代码转换,更可以提供自定义代码分析.与IDE结合的自定 ...

  4. 一个千万量级的APP使用的一些第三方库

    转载:http://www.jianshu.com/p/dc8c05cf693d .背景 前段时间在调研第三方推送服务的时候,反编译了一部分市面上比较流行的APP.其中一个无论是在设计还是功能上都堪称 ...

  5. Flink 另外一个分布式流式和批量数据处理的开源平台

    Apache Flink是一个分布式流式和批量数据处理的开源平台. Flink的核心是一个流式数据流动引擎,它为数据流上面的分布式计算提供数据分发.通讯.容错.Flink包括几个使用 Flink引擎创 ...

  6. 跨平台的C++应用和UI开发库 QT

    跨平台的C++应用和UI开发库 QT 运行环境: 授权方式:BSD 软件大小:M 下载量:3912 更新日期:2012-04-05 来源地址: 联系作者:Linux     Qt是诺基亚开发的一个跨平 ...

  7. 25个Java机器学习工具和库

    本列表总结了25个Java机器学习工具&库: 1. Weka集成了数据挖掘工作的机器学习算法.这些算法可以直接应用于一个数据集上或者你可以自己编写代码来调用.Weka包括一系列的工具,如数据预 ...

  8. 机器学习之scikit-learn库的使用

    1.scikit-learn库简介 scikit-learn是一个整合了多种常用的机器学习算法的Python库,又简称skLearn.scikit-learn非常易于使用,为我们学习机器学习提供了一个 ...

  9. (原创)发布一个c++11开发的轻量级的并行Task库TaskCpp

    TaskCpp简介 TaskCpp是c++11开发的一个跨平台的并行task库,它的设计思路来源于微软的并行计算库ppl和intel的并行计算库tbb,关于ppl和tbb我在前面有介绍.既然已经有了这 ...

  10. 转:25个Java机器学习工具和库

    转自:http://www.cnblogs.com/data2value/p/5419864.html 本列表总结了25个Java机器学习工具&库: 1. Weka集成了数据挖掘工作的机器学习 ...

随机推荐

  1. [Java]【异常处理】在项目开发中的通用规范

    这一问题,已苦恼多日,上述答案系近整整2日广泛阅读书籍.博客.网络问答后,归纳并苦思而成. 本博文仅罗列总的观点,各观点的具体解释,可私信Word笔记. 如需转载or复制时,请注明出处. 本博文同步发 ...

  2. Git多平台/多账号配置

    有时候需要在一台电脑使用多个git平台(Gitee.GitHub.Gitlab...)或者一个平台多个不同账号,比如想同时配置公司git和个人的git,提交代码时提交到对应的平台/账号的代码仓库且互不 ...

  3. 《花雕学AI》17:关注提示工程—本世纪最重要的技能可能就是与AI人工智能对话

    本文目录与主要结构 引言:介绍提示工程的概念和背景,说明为什么它是本世纪最重要的技能之一. 正文: 一.提示工程的基本原理和方法:介绍什么是提示.如何设计和优化提示.如何使用提示与语言模型进行交互. ...

  4. Spring原理探究篇

    spring ioc原理 首先了解一下ioc 的特征,控制反转,就是把之前手动去new对象的操作,现在来交给ioc来实现了,完成代码相对的接偶. 那么,它是怎么去创建bean对象的呐? 原理: 底层依 ...

  5. 【总结】浅刷leetcode,对于位运算提高性能的一些总结

    目录 什么是位运算? 位运算技巧 1. 判断奇偶性 2. 交换两个数 3. 判断一个数是否是2的幂次方 4. 取绝对值 5. 计算平均数 结论 位运算技巧是计算机科学中非常重要的一部分,它可以用来解决 ...

  6. Python 将函数存储在模块中

    将函数存储在模块中 将函数存储在被称为模块的独立文件中,在将模块导入到主程序中 import语句允许在当前运行的程序文件中使用模块中的代码 通过将函数存储在独立的文件中,可影藏程序的代码细节,将重点放 ...

  7. JUC并发编程原理精讲(源码分析)

    1. JUC前言知识 JUC即 java.util.concurrent 涉及三个包: java.util.concurrent java.util.concurrent.atomic java.ut ...

  8. map和multimap

    map相对于set区别,map具有键值和实值,所有元素根据键值自动排序,pair的第一个值被称为键值key,pair的第二个值被称为实值value.map也是以红黑树为底层实现机制,根据key进行排序 ...

  9. 【Ubuntu】3.配置下载源与更新

    在 Ubuntu 中,更改下载源可以加快下载速度.以下是更改 Ubuntu 下载源的步骤: 方法一: 备份之前的 sources.list 文件: sudo cp /etc/apt/sources.l ...

  10. 字符串处理------Brute Force与KMP

    一,字符串的简单介绍 例:POJ1488  http://poj.org/problem?id=1488 题意:替换文本中的双引号: #include <iostream> #includ ...