【01】OpenCV C#——C#开发环境OpenCvSharp 环境配置 工程搭建 及代码测试

文章目录

  • 一、OpenCV 介绍
  • 二、OpenCvSharp 介绍
  • 三、OpenCvSharp环境搭建
    • 3.1 创建新项目
    • 3.2 添加 NuGet组件
    • 3.3 代码测试
    • 3.4 相较于 C++ OpenCV不同的之处
  • 四、LearnOpenCV

在这里插入图片描述

  • 有时候,单纯c#做前端时会联合C++实现的dll来落地某些功能
  • 由于有时候会用C++ - Opencv实现算法后封装成dll,但是有时候会感觉麻烦,不如直接通过C#直接调用Opencv

一、OpenCV 介绍

  • OpenCV是基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习函数库,支持Windows、Linux、Android和Mac OS操作系统。

  • OpenCV由一系列C/C++函数和少量C++类构成,利用MMX和SSE指令。

  • OpenCV实现了图像处理和计算机视觉方面的很多通用算法。

  • OpenCV支持C++、C#、Java、Golang、Ruby和MATLAB开发

OpenCv官网

  • C#是开发效率最高,代码最优雅的唯一工业软件开发语言,开发OpenCV当然必须选择C#

  • 用C#开发OpenCV与调用其他的C/C++类库是一样的路径:(1)ImportDLL;(2)Wrapper;
    推荐Wrapper方式。目前最好的是 OpenCvSharp。

在这里插入图片描述

二、OpenCvSharp 介绍

OpenCvSharp是一个OpenCV的.Net wrapper,应用最新的OpenCV库开发,使用习惯比EmguCV更接近原始的OpenCV,有详细的使用样例供参考。该库采用LGPL发行,对商业应用友好。使用OpenCvSharp,可用C#,VB.NET等语言实现多种流行的图像处理(image processing)与计算机视觉(computer vision)算法。

1.相较于SharperCV与OpenCVDotNet,OpenCvSharp直接封装了更多的OpenCV方法,降低学习难度。
2.大部分了继承了IDisposable接口,方便使用using语句块。
3.不强加面向对象思维,可以直接调用原生风格的OpenCV方法。
4.可以将IplImage直接转为Bitmap(GDI+) 或者WriteableBitmap(WPF)5.支持Mono。可以运行于支持Mono的任何平台上(如Linux,BSD,Mac OS X等)

OpenCvSharp

三、OpenCvSharp环境搭建

3.1 创建新项目

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.2 添加 NuGet组件

推荐用Visual Studio 的 NuGet,直接安装,快速,维护也方便。
安装下面三个基本的组件,如果要开发更多应用,可再安装其他:

  • OpenCvSharp4
  • OpenCvSharp4.runtime.win
  • OpenCvSharp4.Extensioins

方法:在VS项目界面:项目->管理NuGet程序包;在出现的新界面中搜索 opencvsharp,找到上面三个组件下载即可自动安装;
在这里插入图片描述

在这里插入图片描述

动画教程参考
在这里插入图片描述

3.3 代码测试

测试代码,看是否Opencv包可以正常调用:

只需添加一句

using OpenCvSharp;

static void Main(string[] args)中添加

            //创建一张300*300全白图像,和读取一张本地图像,进行显示测试var src = new Mat(new Size(300,300), MatType.CV_8U, Scalar.All(255));Mat img = Cv2.ImRead("D:\\Projects\\Programming_test\\test_Images\\1.jpg");Cv2.ImShow("src", src);Cv2.ImShow("img", img);Cv2.WaitKey(0);

在这里插入图片描述
完整代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;using OpenCvSharp;namespace CvSharp
{class Program{static void Main(string[] args){//创建一张128*128全白图像,和读取一张本地图像,进行显示测试var src = new Mat(new Size(300,300), MatType.CV_8U, Scalar.All(255));Mat img = Cv2.ImRead("D:\\Projects\\Programming_test\\test_Images\\1.jpg");Cv2.ImShow("src", src);Cv2.ImShow("img", img);Cv2.WaitKey(0);}}
}

运行结果
在这里插入图片描述

如果没有添加 using OpenCvSharp,Opencv包调用就找不到

在这里插入图片描述

3.4 相较于 C++ OpenCV不同的之处

  • 1.这里没有进行 包含目录、库目录、附加依赖项 等设置

  • 2.Debug ,Release 模式下,支持任何CUP,不再是X86,X64选项
    在这里插入图片描述

  • 3 .ms文件 及 自动生成的配置文件
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

四、LearnOpenCV

印度程序员Satya Mallick制作的OpenCV学习网站,有一些实用文章与代码。

https://learnopencv.com/

THE BEST DOCUMENT MANAGEMENT SYSTEM 315SOFT.COM

OpenCv C#开发环境配置参考:

C# - Opencv应用(1) 之VS下环境配置详解

C#,OpenCv开发指南(01)——C#开发环境OpenCvSharp的安装、搭建与可视化教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/94607.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【解决办法】报错Found dtype Long but expected Float

Found dtype Long but expected Float错误通常发生在尝试将一个数据类型为Long的张量传递给一个期望数据类型为Float的函数或操作时。在PyTorch中,Long和Float是两种常见的数据类型,分别对应于64位整数和32位浮点数。某些函数或操作可能只接受特定数据类…

QtC++ 调用 tesseract开源库 搭配 Opencv 实现文字识别:从tesseract库基本介绍到实际应用实现

前言 在当今数字化时代,文字识别(OCR)技术已经渗透到我们生活和工作的方方面面,从扫描文档的自动排版到车牌识别、票据信息提取等,都离不开 OCR 技术的支持。而在众多 OCR 实现方案中,QtC 结合 tesseract 和…

数据集-目标检测系列- 地球仪 数据集 globe>> DataBall

数据集-目标检测系列- 地球仪 数据集 globe>> DataBall贵在坚持!* 相关项目1)数据集可视化项目:gitcode: https://gitcode.com/DataBall/DataBall-detections-100s/overview2)数据集训练、推理相关项目&…

[Oracle] DUAL数据表

Oracle中的DUAL数据表是一个特殊的单行单列虚拟表结构:1行1列SELECT * FROM DUAL;输出结果:列名默认DUMMY,值为X常见使用DUAL数据表的场景:1.系统函数调用测试当需要测试Oracle函数但不需要真实表数据时,我们可以考虑使…

第五篇: 深入解析基于 SQLAlchemy 的聊天记录持久化模块:`message_model` 与数据库操作封装

深入解析基于 SQLAlchemy 的聊天记录持久化模块:message_model 与数据库操作封装 作者:zgw 标签:SQLAlchemy、Python、FastAPI、数据库持久化、ORM、聊天系统、AI 应用开发 一、前言 在构建大模型应用(如聊天机器人、知识库问答系统)时,对话记录的持久化 是实现“可追溯…

学习游戏制作记录(将各种属性应用于战斗以及实体的死亡)8.5

1.将各种属性应用于战斗我们希望将上节课的CharactorState脚本作为一个父类,而玩家和敌人的属性状态都是继承自它的创建PlayerStats脚本:public class PlayerStats : CharactorState {private Player player;//获取玩家脚本protected override void Star…

Higgsfield平替,地球转场+动物竖中指AI视频教程

大家好,这里是K姐。 一个帮助你把AI真正用起来的女子。 最近TikTok上的网友已经集体疯魔了——刷到的视频总以高空航拍开场,镜头从地球拉近后,要么是橘猫蹲在白宫草坪比中指,要么是柴犬在富士山顶比中指…… 这种堪比好莱坞运镜…

界面规范的其他框架实现-列表-layui实现

另一个要改造的系统使用了layui,改造方式如下:斑马线:.layui-table[lay-even] tr:nth-child(even) {background-color: #f2f2f2 }鼠标滑过:.layui-table tbody tr:hover{background-color: #8dccff }标题行:.layui-tab…

STM32学习笔记2-GPIO的输出模式

GPIOGPIO:通用输入输出口;可配置8种输入输出模式引脚电平:0V-3.3V,部分引脚可容忍5V也可认为高电平,但是对于输出而言,最大就只能输出3.3V,因为供电就只有3.3V,能容忍5v的在以下的引…

Linux系统学习2之磁盘管理

了解磁盘内容:df:df -a (-a是列出所有,-k以kb显示,-h以Gb显示,-m以Mbyte显示,-H为用1000b代替1024b,-t为显示文件类型,-i为用inode显示容量):&a…

北大、蚂蚁三个维度解构高效隐私保护机器学习:前沿进展+发展方向

在数据隐私日益重要的 AI 时代,如何在保护用户数据的同时高效运行机器学习模型,成为了学术界和工业界共同关注的难题。北大团队最新完成的综述《Towards Efficient Privacy-Preserving Machine Learning: A Systematic Review from Protocol, Model, and…

计算机网络:如何在实际网络中进行子网划分

在实际网络中,子网划分是通过“借位”将一个大的IP网络分割为多个小的子网,以提高IP地址利用率、增强网络安全性和简化管理。以下是具体的实施步骤、原理和注意事项: 一、子网划分的核心目的 提高IP利用率:避免大网络中IP地址的浪费(例如一个C类地址默认支持254台主机,若…

《第五篇》基于RapidOCR的图片和PDF文档加载器实现详解

基于RapidOCR的图片和PDF文档加载器实现详解 引言 在构建知识库时,我们经常需要处理包含图片和PDF文档的数据。这些文档中的文本信息通常以图像形式存在,需要通过OCR技术来提取。本文将详细介绍如何使用RapidOCR技术实现图片和PDF文档的文本提取加载器。 核心概念 RapidO…

[硬件电路-122]:模拟电路 - 信号处理电路 - 模拟电路与数字电路、各自的面临的难题对比?

数字电路和模拟电路是电子技术的两大基础分支,它们分别处理不同类型的信号,并在设计方法、元件特性、应用场景等方面存在显著差异。以下是两者的详细定义及异同对比:一、定义与核心概念1. 模拟电路(Analog Circuit)定义…

Linux多线程——线程控制

目录 1.线程知识补充 1.1 线程私有资源 1.2 线程共享资源 1.3 原生线程库 2、线程控制接口 2.1 线程创建 2.1.1 一批线程 2.2 线程等待 2.3 线程终止 2.4 线程实战 2.5 其他接口 2.5.1 关闭线程pthread_cancel 2.5.2 获取线程 ID pthread_self 2.5.3 线pthread_de…

Python爬虫实战:研究spiderfoot工具,构建网络情报收集系统

1. 引言 1.1 研究背景 在数字化时代,互联网公开信息已成为国家治理、企业决策与学术研究的战略资源。据 Statista 统计,2023 年全球互联网数据总量突破 120ZB,其中可通过公开渠道获取的情报信息占比超 30%。传统人工信息收集方式受限于效率与广度,难以应对海量数据处理需…

在路由器openwrt上安装openclas

在路由器openwrt上安装openclas 名词解释 las: lash 运行效果图 安装 安装教程参考: 官方:github.com 官方2:openclas.net 如果安装完成后菜单上没有,重启路由后在“服务”菜单下 点击运行会提示下载内核,按提示…

HIVE 窗口函数处理重复数据

窗口函数row_number(),结合OVER子句中的PARTITION BY和ORDER BY,为数据分组内的每一行生成一个唯一的序号。具体分析如下:函数作用:row_number():为每个分组内的行分配一个唯一的连续序号(从1开始&#xff…

自动驾驶控制算法——MPC控制算法

自动驾驶控制算法——MPC控制算法 文章目录自动驾驶控制算法——MPC控制算法一、MPC 是什么?1.1 定义与核心思想1.2 MPC 与传统控制器(如 PID)的区别1.3 自动驾驶中 MPC 的典型应用场景🚗 轨迹跟踪控制(Trajectory Tra…

【DL学习笔记】各种卷积操作总结(深度可分离、空洞、转置、可变形)

Vanilla Convolution 普通卷积 卷积通道数: 卷积核的数量决定输出的张量的通道数nnn,输入的张量和每一个核Kernel做卷积运算得到一个channel的输出。输入通道数CinC_{in}Cin​决定每一个卷积核的通道数 卷积输出feature map的尺寸的计算公式&#xff1…