c# 计算空格宽度像素_用pythonnet为计算机视觉做图像整理

  中国的.NETer是国内技术的另类,当他们强调.NET也可以做啥啥时都会给别的技术藐视,毕竟主流都不用.NET。本人这几年其实花在.NET时间也少,都投入在Python/Go社区。可我还是有点工作外的寄托,就是让.NET也有一个很好的推广,毕竟在使用Python/Go中有些东西比不少.NET来得方便。机器学习对于.NETer又是一个危机,特别在国内有一句名言".NET 不行"。幸亏这是9012年了,Github上有很多开源项目,有不少.NET Core的开源项目让大家有了和其他技术竞争的底气。SciSharp(https://github.com/SciSharp)就是一个基于.NET的机器学习/深度学习解决方案,让.NETer不需要学习Python,就可以用Keras/TensorFlow/Torch 通过C#/F# 来完成机器学习/深度学习。

7c2082dbf5c01d5f8096f4f85dc779e9.png


        SciSharp现在有两种不同的绑定方式如TensorFlow.NET/NumSharp都是基于原生c库做扩展,不需要依赖客户端的环境,随处可以调用,但有个问题是因为绑定的工作太多,往往功能上不太完整。而另一种方式就是通过pythonnet去完成,这种方式依赖于客户端的Python环境可以直接通过C#/F#直接调用任何本机已经安装的Python库和自带方法,如之前提到的Keras.NET / Numpy.NET都是这种形式。就我个人而言比较喜欢后者,毕竟实现更快,更容易上手,而且对于现在SciSharp社区不同子项目的扩展也有不少帮助,毕竟社区内的都是业余时间,功能不可能一时半刻都完成,所以这种方式能更好地填补缺陷。

       pythonnet允许Python代码与CLR做交互,也可以将Python代码嵌入.NET 应用中(https://github.com/pythonnet/pythonnet).你可以编译源码为本机Python和.NET互相调用的支持。如果你只是单一希望通过.NET调用Python可以基于你系统和Python版本通过Nuget添加SciSharp社区编译好的Python.Runtime包。下面通过图像整理来说明一下我是如何做的。

  做计算机视觉,图像前期的处理很重要。首先收集来的图像大小不一,其次是像素,还有格式。在Python下通过Pilow对图片进行处理,通过Pillow可以对图片像素,大小,方向,格式进行调整。通过pip install pillow就可以添加Pillow库。如果希望通过.NET调用Pillow就需要通过pythonnet进行引用。我们来看看一个实例:

       1. 首先我创建一个.NET Core的控制台程序,然后添加Python.Runtime包, 因为我是macOS,所以添加的是Python.Runtime.OSX, 而机上的Python版本是3.7 所以对应的是Python.Runtime.OSX 3.7.0的版本, 然后通过VSCode打开创建好的项目

ad2f7bee330ae80d4179b39c2a77ddf6.png


        2. 使用pythonenet, Py.GIL()是必须有的,初始化后,通过Py.Import引入不同的模块(注意这里必须还是得强调必须是本机已经有的模块,没有是不能引用的), 还有引用后参数类型都是dynamic

5f3a1bbf37910a79a04913ebdab25f97.png


       我这里分别引用了Numpy , Matplotlib, Pillow三个库,Pillow负责图像处理/Numpy负责数值计算,存储和处理矩阵/Matplotlib主要用于绘制2D图形,通常用来显示相关处理后的结果。对图像处理,我们基本上就是用这三个库。

      3. 方法调用,我这里针对一张图完成三种处理,旋转/灰度/还有就是缩放。先来看看效果

acee20451060c16a904a3af20a751c64.png

       我们这里需要通过Matplotlib显示一个一行四列的图片,通过numpy为Matplotlib设置好大小,第一个是原图,第二个是旋转,第三个是灰度,因为引入了库,所以你可以直接调用库自带相应的方法。

20ff724c72a8a41c7678817d9d5cddb1.png

        遇到一个问题是PIL.Image 有一个自带方法new,这个方法是不能直接调用的,因为和C#的关键字new冲突,这个时候你需要通过InvokeMethod的方法去触发new方法,以下是实现方式 

3f704cb5b865e0571fbd95bf806f5244.png


        最后别忘记使用plt.show() 显示结果。

        上面的例子把pythonnet如何在C#使用展示出来,我也通过ICSharpCore在JupyterNotebook 上进行了调用。扩展了一下Plot.NET(https://github.com/SciSharp/Plot.NET)让它支持图像显示, 这是在Notebook上使用的效果

3f8004f00d39a9b737e24a3599342c6a.png

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

2f50eb3bafeb56cc6fd5d9d831871f00.png

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

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

相关文章

C语言笔试不好应该转专业吗,你认为大学里什么学科“难学”?过来人说出几门,考试难补考更难...

原标题:你认为大学里什么学科“难学”?过来人说出几门,考试难补考更难文/晓宁说教育2020届的大一新生们的第一个学期已经结束了,经过了一个学期的学习和生活,相信很多学生都对自己的大学有了一定的规划。尽管进入大学之…

mysql默认值无效_MySQL开发规范

一、基础规范1) 使用InnoDB存储引擎2) 数据库字符集使用UTF8,校对字符集使用utf8_general_ci3) 所有表、字段都尽量添加注释4) 库名、表名、字段名使用小写字母,禁止超过32个字符,须见名知意5&a…

set和map去重调用什么方法_你真的了解ES6的Set,WeakSet,Map和WeakMap吗?

之前在学习 ES6 的时候,看到 Set 和 Map,不知道其应用场景有哪些,只觉得很多时候会用在数组去重和数据存储,后来慢慢才领悟到 Set 是一种叫做集合的数据结构,Map 是一种叫做字典的数据结构。SetSet 本身是一个构造函数…

c语言整数反转用while函数,7.整数反转(LeetCode)——C语言

根据题目要求,必须是32位有符号整数,数值范围是[-2^31, 2^31-1],换算出来就是-2147483648 —— 2147483647之间。将此范围内的数值反转可能会导致溢出,比如1234567893,反转之后为3987654321,已然超出了以上…

python画饼图存在的问题_Matplotlib 绘制饼图解决文字重叠的方法

在使用Matplotlib 绘制饼图的时候有些时候一些数据的比列太小在饼图呈现的效果不明显 很容易被覆盖,为了解决这个问题以下就是我个人的心得。 【未解决之前呈现的效果】可以看到这个饼状图其他和硕士这2个部分占比很小而且比例相互覆盖,这让人看起来不舒…

antdesign图片点击放大_点击图片放大特效代码,全屏显示,再点击恢复原状【多种方法】...

我们先来看看效果如何,点击图片试一试。图片的实际大小为1920x1080,我们先把宽度限制在300px,点击后图片还原到100%(如果浏览器窗口高度小于图片的真实高度,这样的情况下,图片虽然宽度还原到100%,但是所显示…

c语言中math的库函数,C语言中math.h库中的常用函数

C语言中math.h库中的常用函数 int abs(int i) 返回整型参数i的绝对值double cabs(struct complex znum) 返回复数znum的绝对值double fabs(double x) 返回双精度参数x的绝对值long labs(long n) 返回长整型参数n的绝对值double exp(double x) 返回指数函数e^x的值double frexp(…

python变量类型是动态的_【Python】python动态类型

在python中,省去了变量声明的过程,在引用变量时,往往一个简单的赋值语句就同时完成了,声明变量类型,变量定义和关联的过程,那么python的变量到底是怎样完成定义的呢? 动态类型 python使用动态类…

python bottle部署g_python bottle框架(WEB开发、运维开发)教程 | linux系统运维

教程目录一:python基础二:bottle基础python bottle 框架基础教程:环境部署三:WEB开发教程四:运维开发教程运维开发(1.1):框架、结构介绍运维开发(1.2):前端(ajax)说明运维开发(1.3):…

c语言excel转pdf,基于C语言和Excel软件下光速测量仪测量玻璃折射率.pdf

基于C语言和Excel软件下光速测量仪测量玻璃折射率.pdf基于语言和 软件下光速测量仪测量玻璃折射率 朱承君 王奇峰 芦立娟 张艳春 ( 浙江海洋学院机电学院 浙江 舟山 ) ( 收稿日期 ) 摘要 介绍了用等相位法测玻璃折射率的原理和方法, 并利用了 语言和 在科学计算中的…

python3.7界面_Python3.7+tkinter实现查询界面功能

Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。 这篇文章使用tkinter实现一个简单的查询界面 #!/usr/bin/python # -*- coding: UTF-8 -*- from tkinter import * import sqlite3 # 导入消息对话框子模块 import tkinter.messagebox #im…

python中级水平_python 初级/中级/高级/核心

"一等对象":满足条件:1.在运行时创建 2.能赋值给变量或数据结构中的元素 3.能作为参数传递给函数 4.能作为函数的返回结果[ 整数、字符串、字典、"所有函数" ]等都是一等对象"什么是函数"调用:直接使用、不需要类或对象进…

c语言报错spawning 插1,C语言错误····error spawning c1.exe

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼“CL.exe”是VC使用真正的编译器(编译程序),其路径在“VC根目录\VC98\Bin”下面,你可以到相应的路径下找到这个应用程序。因此问题可以按照以下方法解决:打开vc界面 点击VC“TOOLS(工具)”—>…

python中的元类_Python中的元类(metaclass)

提问者自称已经掌握了有关Python OOP编程中的各种概念,但始终觉得元类(metaclass)难以理解。他知道这肯定和自身有关,但仍然觉得不太明白,希望大家可以给出一些实际的例子和代码片段以帮助理解,以及在什么情况下需要进行元编程。 …

方言大全_长沙人亲戚称呼大全!记得收藏以防失传!

长沙人亲戚称呼大全!记得收藏以防失传!首先,看一下中国亲戚称谓图!▼长沙方言对于亲人的称谓自有一套说法!(如有不同,以你自己的叫法为准哦~)▼长辈篇父亲:ya、“爷(ya)老倌”,“爷(…

adb android源码分析,Android Adb 源码解析(base on Android 9.0)

Adb 框架Adb架构Android Adb 一共分为三个部分:adb、adb server、adbd,源码路径:system⁩/⁨core⁩/⁨adb。adb和adb server 是运行在PC端,adb就是大家所熟悉的控制台命令adb,adb server是由adb fork出的一个常驻后台的…

oracle 解锁 账户_oracle用户解锁三种方法

ORA-28000: the account is locked-的解决办法2009-11-11 18:51ORA-28000: the account is locked第一步:使用PL/SQL,登录名为system,数据库名称不变,选择类型的时候把Normal修改为Sysdba;第二步:选择myjob,查看users;第三步&…

android 解码webp动画,android webp编解码详解

key words:android decode webp sample当我敲下键盘的时候有种深深的耻辱感,看到android 4.0支持webp格式的图像,于是我狠命的找提供了什么样的api,nnd,硬是没找到,后来抱着试试的心态,用Bitmap…

python生成json_如何将Python数组转为Json格式数据并存储?

在Python中将数组转为Json数据存储时需要用到将json模块中的json.dumps()或者json.dump()方法。 json.dumps()方法用法 使用json.dumps( )方法将Python数组转为json格式数据 # 导入json模块 import json # 定义Python数组 py_list [{JavaEE: "http://java.itheima.com&qu…

rust里mp5a4_Rust源码分析:channel内部mpsc队列

首先,之前的upgrade过程中内存的回收要稍微注意下。因为Receiver现在指向shared::Packet之后,那个new_port需要被析构,也就是调用drop函数,我们看下drop的实现:implDropforReceiver{fn drop(&mutself){match*unsaf…