c#计算机视觉库openCVSharp
作为研究计算机视觉的一员,大家肯定对Intel大名鼎鼎的openCV系列计算机视觉库耳熟能详,对于很多人来说openCV甚至已经成为其项目研究不可缺少的一部分。但是,由于项目兼容性的要求、openCV的GUI功能不够丰富等原因很多人希望能够在C#环境中使用openCV。
在目前针对c#的计算机视觉库主要有两种,EmguCV和openCVSharp。
Emgucv的优势在于不仅仅提供了计算机视觉函数接口并且提供了一系列界面控件接口,但目前只支持openCV1的书写风格。
openCVSharp提供了openCV和openCV2两种书写风格,并且和openCV的imagewatch一样,提供了一种简单有效的调试工具Debugger Visualizer,具体使用可见一下网址
https://github.com/shimat/opencvsharp/wiki/Debugger-Visualizer。
在这里我的推荐是使用openCVSharp,在这里主要考虑的是协议方面的问题。opencv的协议是BSD协议,这是对开发者来说是相当友好的协议;网上常见的免费版EmguCV则是GUN协议,任何发表都需要至少公布你的源代码;openCVSharp则是相对温和多的LGUN协议,这个协议和QT是差不多相同的,甚至当你不使用自带的DLL时,和openCV一样是BSD协议(如果你对协议感兴趣的话可以自行百度)。
具体配置方法可以自行百度,简单来说就是添加相应的com组件(注意有一个com组件右键添加,只能手动放在相应的exe目录下),然后添加相应的命名空间。
下面分别是c和c++风格的代码,获取相应位置像素值,速度由慢向快排列。
//c风格代码
//方案一
IplImage img = new IplImage("baz.png", LoadMode.Color);
for (int y = 0; y < img.Height; y++) {
for (int x = 0; x < img.Width; x++) {
CvColor c = img[y, x];
img[y, x] = new CvColor() {
B = (byte)Math.Round(c.B * 0.7 + 10),
G = (byte)Math.Round(c.G * 1.0),
R = (byte)Math.Round(c.R * 0.0),
};
}
}
//方案二
IplImage img = new IplImage("baz.png", LoadMode.Color);
unsafe {
byte* ptr = (byte*)img.ImageData;
for (int y = 0; y < img.Height; y++) {
for (int x = 0; x < img.Width; x++) {
int offset = (img.WidthStep * y) + (x * 3);
byte b = ptr[offset + 0]; // B
byte g = ptr[offset + 1]; // G
byte r = ptr[offset + 2]; // R
ptr[offset + 0] = r;
ptr[offset + 1] = g;
ptr[offset + 2] = b;
}
}
}
方案三
IplImage img = new IplImage("baz.png", LoadMode.Color);
IntPtr ptr = img.ImageData;
for (int x = 0; x < image.Width; x++) {
for (int y = 0; y < image.Height; y++) {
int offset = (image.WidthStep * y) + (x * 3);
byte b = Marshal.ReadByte(ptr, offset + 0); // B
byte g = Marshal.ReadByte(ptr, offset + 1); // G
byte r = Marshal.ReadByte(ptr, offset + 2); // R
Marshal.WriteByte(ptr, offset, r);
Marshal.WriteByte(ptr, offset, g);
Marshal.WriteByte(ptr, offset, b);
}
}
//c++风格代码
//方案一
Mat mat = new Mat("lenna.png", LoadMode.Color);
for (int y = 0; y < mat.Height; y++)
{
for (int x = 0; x < mat.Width; x++)
{
Vec3b color = mat.Get<Vec3b>(y, x);
byte temp = color.Item0;
color.Item0 = color.Item2; // B <- R
color.Item2 = temp; // R <- B
mat.Set<Vec3b>(y, x, color);
}
}
GenericIndexer (reasonably fast)
//方案二
Mat mat = new Mat("lenna.png", LoadMode.Color);
var indexer = mat.GetGenericIndexer<Vec3b>();
for (int y = 0; y < mat.Height; y++)
{
for (int x = 0; x < mat.Width; x++)
{
Vec3b color = indexer[y, x];
byte temp = color.Item0;
color.Item0 = color.Item2; // B <- R
color.Item2 = temp; // R <- B
indexer[y, x] = color;
}
}
方案三
Mat mat = new Mat("lenna.png", LoadMode.Color);
MatOfByte3 mat3 = new MatOfByte3(mat); // cv::Mat_<cv::Vec3b>
var indexer = mat3.GetIndexer();
for (int y = 0; y < mat.Height; y++)
{
for (int x = 0; x < mat.Width; x++)
{
Vec3b color = indexer[y, x];
byte temp = color.Item0;
color.Item0 = color.Item2; // B <- R
color.Item2 = temp; // R <- B
indexer[y, x] = color;
}
}
最后,openCVSharp下载地址为https://github.com/shimat/opencvsharp/releases。如果,无法下载私信我,我可以提供2.4.10、3.1和3.2三种版本。
---------------------
作者:小立1991
来源:CSDN
原文:https://blog.csdn.net/qq_21400315/article/details/52451941
版权声明:本文为博主原创文章,转载请附上博文链接!
c#计算机视觉库openCVSharp的更多相关文章
- 介绍n款计算机视觉库/人脸识别开源库/软件
计算机视觉库 OpenCV OpenCV是Intel®开源计算机视觉库.它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法. OpenCV 拥有包括 300 多个 ...
- AR、美颜、机器人:计算机视觉库几乎无所不在
最近日本推出的反美颜应用Primo可能让感到不胜惶恐.其实,这样反人类的应用,你也能写出,不过必须了解的一些技术,就是计算机视觉.目前,计算机视觉库包括FastCV.OpenCV.JavaCV等. 相 ...
- 计算机视觉库 SimpleCV
SimpleCV首页.文档和下载 - 计算机视觉库 - 开源中国社区 计算机视觉库 SimpleCV 编辑/纠错 分享到 新浪微博腾讯微博 已用 +0 收藏 + ...
- 64位Win7下编译Python3的计算机视觉库:OpenCV
注:本文全原创,作者:Noah Zhang (http://www.cnblogs.com/noahzn/) OpenCV目前最新版是3.0.0 rc1,官方给出了编译好的Python2可以直接使用 ...
- OpenCV(Open Source Computer Vision Library)计算机视觉库
OpenCV(最基本的滤波到高级的物体检测皆有涵盖) 简介: OpenCV 是跨平台的,可以在 Windows.Linux.Mac OS.Android.iOS 等操作系统上运行. OpenCV 的 ...
- 值得推荐的C/C++框架和库
值得推荐的C/C++框架和库 [本文系外部转贴,原文地址:http://coolshell.info/c/c++/2014/12/13/c-open-project.htm]留作存档 下次造轮子前先看 ...
- [转载]C/C++框架和库
C/C++框架和库 装载自:http://blog.csdn.net/xiaoxiaoyeyaya/article/details/42541419 值得学习的C语言开源项目 Webbench Web ...
- python常用库
本文由 伯乐在线 - 艾凌风 翻译,Namco 校稿.未经许可,禁止转载!英文出处:vinta.欢迎加入翻译组. Awesome Python ,这又是一个 Awesome XXX 系列的资源整理,由 ...
- 1.值得推荐的C/C++框架和库 (转)
值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的 ...
随机推荐
- DOM-节点概念-属性
1.节点的概念 页面中的所有内容,包括标签,属性,文本(文字,空格,回车,换行等),也就是说页面的所有内容都可以叫做节点. 2.节点相关的属性 2.1.节点分类 **标签节点:**比如 div 标签, ...
- Bypass_Disable_functions_Shell
Bypass_Disable_functions_Shell https://github.com/l3m0n/Bypass_Disable_functions_Shell 一个各种方式突破Disab ...
- TCPDF说明文档
TCPDF说明文档 一.首先调用TCPDF文件 require_once('tcpdf.php'); 二.实例化TCPDF类 页面方向(P =肖像,L =景观).测量(mm).页面格式 $pdf = ...
- Java 短信发送
package com.test; import org.apache.commons.httpclient.Header;import org.apache.commons.httpclient.H ...
- 多选ui实现单选效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- ubuntu 16.04卸载不必要默认安装软件
两个办法,一个在ubuntu软件里一个一个删,明显的windows下做法. 还有一个通过终端来删除.ctrl+alt+t打开终端. 1.卸载libreoffices(要删一起删了,然后去装office ...
- 回顾4180天在腾讯使用C#的历程,开启新的征途
今天是2018年8月8日,已经和腾讯解除劳动关系,我的公司正式开始运营,虽然还有很多事情需要理清,公司官网也没有做,接下来什么事情都需要自己去完成了,需要一步一个脚印去完善,开启一个新的征途,我将在博 ...
- 脚本语言丨Batch入门教程第三章:逻辑判断
通过学习Batch入门教程的前两章内容,我们已经大致掌握了基本概念和认识变量的相关内容,今天我们要跟大家继续分享第三章内容:Batch入门教程之逻辑判断. 前期回顾 ◀Batch入门教程丨部署与H ...
- FFmpeg 结构体学习(一): AVFormatContext 分析
在 FFmpeg 学习(六):FFmpeg 核心模块 libavformat 与 libavcodec 分析 中,我们分析了FFmpeg中最重要的两个模块以及重要的结构体之间的关系. 后面的文章,我们 ...
- 【从零开始搭建自己的.NET Core Api框架】(三)集成轻量级ORM——SqlSugar:3.1 搭建环境
系列目录 一. 创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSuga ...