OpenCV在C#中应用—OpenCVSharp
1、什么是OpenCVSharp
之前一直是基于OpenCV开发视觉算法,但C++语言对于GUI的开发相对于C#来说确实很不方便,之前就了解到C#下使用OpenCV可以使用EmguCV,这段时间也确实是调通了,但是是通过把C++封装成动态链接库在C#中调用,这样在修改算法的过程中就会非常的不方便,封装DLL的时候也比较麻烦。在C#中除了Emgucv之外,还有一种叫做OpenCVSharp的工具,从名字就可以看出其是OpenCV提供给C#的接口。OpenCVSharp是OpenCV的.NET wrapper,它比Emgucv更接近于原始的OpenCV,并且有很多的样例参考,其采用LGPL发行,对商业应用友好(基本上相当于BSD)。
2、OpenCVSharp有什么特点
直接封装了更多的OpenCV方法,降低了学习的难度,比EmguCV更便于使用
大部分继承了IDisposable接口,方便使用using语句
可以直接调用原始风格的OpenCV方法
可以将图像对象直接转换成GDI使用的Bitmap和WPF的WriteBitmap
支持Mono。
3、OpenCVSharp在VS中的环境配置
相比较OpenCV配置比较麻烦,OpenCVSharp和EmguCV一样,其不需额外的系统环境配置,只需要对项目进行简单的配置即可使用。
安装OpenCVSharp
有两种方式:一种是使用NuGet(库程序包管理器);另一种直接下载安装包。
第一种方式:使用NuGet(库程序包管理器),首先打开VS,在【工具】选项中是否有【库程序包管理器】
没有的话自己去安装好NuGet.
https://jingyan.baidu.com/article/066074d636fd19c3c21cb0a2.html(转载自百度)
安装好之后,打开【工具】->【库程序包管理器】->【管理解决方案的NuGet程序包】,在其中搜索OpenCVSharp,选择合适的点击【安装】(最好安装最新的)。一直等待完成。
完成安装之后,需要将安装文件的DLL文件放置在项目可执行文件的Debug文件夹下,怎么去找安装好的文件呢
第二种方式是直接下载安装包
https://github.com/shimat/opencvsharp/releases
下载好之后解压到一个文件夹(任意的文件夹)
VS中OpenCVSharp的配置
文件安装好之后,在【解决方案】中右键【引用】->【添加引用】,选择【浏览】,将下载文件中的OpenCvSharp.dll文件添加进引用。
将下载文件中的OpenCvSharpExtern.dll复制到可执行文件的Debug文件夹下,所有配置OK,下面测试是否配置成功。
4、测试代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenCvSharp; //添加相应的引用即可
namespace OpenCVSharpTest2
{
class Program
{
static void Main(string[] args)
{
Mat source = new Mat(@"1.bmp", ImreadModes.Color);
Cv2.ImShow("Demo", source);
Cv2.WaitKey(0);
}
}
}
---------------------
作者:jameshater
来源:CSDN
原文:https://blog.csdn.net/jameshater/article/details/79642384
版权声明:本文为博主原创文章,转载请附上博文链接!
OpenCV在C#中应用—OpenCVSharp的更多相关文章
- [学习opencv]高斯、中值、均值、双边滤波
http://www.cnblogs.com/tiandsp/archive/2013/04/20/3031862.html [学习opencv]高斯.中值.均值.双边滤波 四种经典滤波算法,在ope ...
- 【opencv基础】OpenCV从Mat中提取某些行或列
这两个函数返回的是指向原矩阵内部位置的指针,类似于浅拷贝: code cv::Mat align_mean(cv::Mat mean, cv::Rect facebox, float scaling_ ...
- OpenCV 3.0中IplImage* 转cv::Mat
在OpenCV 2.0中使用: IplImage * ipl1, *ipl2; // ... const cv::Mat m = cv::Mat(ipl,false); cv::Mat m2 = ip ...
- Opencv在视频中静态、动态方式绘制矩形框ROI
Opencv视频处理中的目标跟踪经常用到要在视频上画一个矩形框ROI,标注出要跟踪的物体,这里介绍两种在视频中绘制矩形框的方法,一种是"静态的",一种是"动态的" ...
- opencv、numpy中矩阵转置,矩阵内的固定位置相应的坐标变换
opencv.numpy中矩阵转置,矩阵内的固定位置相应的坐标变换
- C#使用OpenCV剪切图形中的人物头像
前言 本文主要介绍如何使用OpenCV剪切图形中的人物头像. 准备工作 首先创建一个Wpf项目--OpenCV_Face_Wpf,这里版本使用Framework4.7.2. 然后使用Nuget搜索[E ...
- C#使用OpenCV剪切图像中的圆形和矩形
前言 本文主要介绍如何使用OpenCV剪切图像中的圆形和矩形. 准备工作 首先创建一个Wpf项目--WpfOpenCV,这里版本使用Framework4.7.2. 然后使用Nuget搜索[Emgu.C ...
- 利用OpenCV检测图像中的长方形画布或纸张并提取图像内容
基于知乎上的一个答案.问题如下: 也就是在一张照片里,已知有个长方形的物体,但是经过了透视投影,已经不再是规则的长方形,那么如何提取这个图形里的内容呢?这是个很常见的场景,比如在博物馆里看到一幅很喜欢 ...
- opencv 在工业中的应用:二维标定
在工业中经常要检测一个零件的尺寸,但是图像处理得到的是像素值,怎么才能得到实际的毫米值呢?这就要用到二维标定,我用OPENCV写了一个利用标定板进行标定的DEMO. 很多商业软件都没有二维标定的功能, ...
随机推荐
- C# 对串口的操作
初始化 串口 SerialPort sp = new SerialPort(); sp.PortName = BasicParameters.IniReadValue(strPath, "C ...
- 菜鸡谈OO 第二单元总结
“欢迎来到(玄学)多线程的新世界” Homework1 单部傻瓜电梯调度 Part1 多线程设计策略 第一次学到了线程这个概念,与之前的编程体验大有不同.最大的区别在于从原本的线性发生程序变成了多个行 ...
- docker kubernetes Swarm容器编排k8s CICD部署
1docker版本 docker 17.09 https://docs.docker.com/ appledeAir:~ apple$ docker version Client: Docker En ...
- Mybatis Mapper文件中的一小坑
前几天来一需求,实现过程中需要修改一个底层的查询接口,具体修改就是在where中添加一个条件,由于这个底层SQL使用的地方太多,所以就想着是用if加一标识符做个判断,传一个只有我会使用的参数,然后动态 ...
- Conda命令指标
一.Conda相关指令 # 查看当前环境下已安装的包 conda list # 查看某个指定环境的已安装包 conda list -n tensorflow # 查找package信息 conda s ...
- kali linux 网络渗透测试学习笔记(二)OWASP ZAP工具扫描SQL injection漏洞失败
按照惯例,利用OWASP ZAP工具扫描SQL injection漏洞时,应该很快就可以扫描出来,但是在笔者进行扫描的时候,却遇到了以下状况: 这说明了该工具根本就没能够扫描出SQL注入的漏洞,不知道 ...
- 微信小程序请求API接口PHPSESSID变化的解决方式
微信小程序开发,请求服务器API的方法使用的是微信官方提供的wx.request()方法.在开发中发现,每一个请求都会生成一个独立的PHPSESSID,如下图示: 搜索后得知,这是由于wx.reque ...
- redis 系列20 服务器下
二. serverCron函数 2.3 更新服务器每秒执行命令次数 serverCron函数中的trackOperationsPerSecond函数会以每100毫秒一次的频率执行,这个函数以抽样计算的 ...
- 深入理解Spring IOC工作原理
为什么会出现spring,spring出现解决了什么问题? 1.分析普通多层架构存在的问题 JSP->Servlet->Service->Dao 层与层之间的依赖很强,属于耦合而且是 ...
- Linux~常用的命令
大叔学Linux就一个目的,部署在它上面的服务,如redis,mongodb,fastDFS,cat,docker,mysql,nginx等 下面找一下的命令,来学学这个神秘的操作系统 常用指令 ls ...