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届的大一新生们的第一个学期已经结束了,经过了一个学期的学习和生活,相信很多学生都对自己的大学有了一定的规划。尽管进入大学之…

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

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

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

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

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中的元类(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出的一个常驻后台的…

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…

vscode angular智能提示_【线下活动】手把手教你玩转 VS Code 插件开发

感谢 Google Developer Group 的邀请,3 月 30 号下午,韩老师将手把手带你玩转 VS Code 插件开发。 Angular 使用了 TypeScript,VS Code 使用了 Chromium。感谢这个开放与包容的时代,技术无界,正是大家对技术有着执着的…

ext js如何动态更改xtype_K8S ConfigMap 用于动态应用程序的实践

编辑:小君君技术校对:星空下的文仔、bot在 Kubernetes 中,ConfigMap 是允许管理员将配置组件与镜像内容解耦,使容器化应用程序产生可移植性的一种资源。ConfigMap 可以与 Kubernetes Pod 一起使用,用于动态添加或更改容…

python教材答案第六章_python第六章{输入和输出}

输出 用print加上字符串,就可以向屏幕上输出指定的文字。比如输出hello, world,用代码实现如下: >>>print hello, world print语句也可以跟上多个字符串,用逗号“,”隔开,就可以连成一串输出: >…

字长16位的计算机表示最大整数_废话不多说跪送计算机选择8前十题

1.字长是CPU的主要性能指标之一,它表示(a)a.CPU—一次能处理二进制数据的位数b.最长的十进制整数的位数c.最大的有效数字位数d.计算结果的有效数字长度答案解析【解析】字长是指计算机运算部件一次能同时处理的二进制数据的位数。2.字长为7位的无符号二进制整数能表示的十进制整…

节点name在graph中无法展示_图节点分类与消息传递

Message passing and node classification本文主要解决的问题:给定一个网络, 其中部分节点有label, 如何能将其他的节点分配对应的节点label呢? (在生活中有很多这样的例子, 比如通过交互行为来判断用户是否…

华为荣耀v20是android10,荣耀V20和荣耀V10买哪个好

随着华为NOVA 4的发布,接下来要期待的就是荣耀V20了。从目前曝光的信息来看,这款手机确实憋了不少大招,而且比华为NOVA 4更好的一点是它搭载的是麒麟980处理器,至于它的价格应该会与华为NOVA 4相近。虽然荣耀V20很诱人&#xff0c…

git配置全局用户名和密码_还在手动打包,手动传jar包?那你确实应该学一下jekins配置了...

本文为小编原创文章,首发于Java识堂微信公众号,一个高原创,高收藏的公众号,转载请联系作者先说jekins能干啥,你把代码放到git上,jekins就能帮你编译代码,并且把jar包放到相应的服务器上&#xf…

python图片横向合并_[宜配屋]听图阁

起因: 有一批数据需要每个月进行分析,数据存储在excel中,行标题一致,需要横向合并进行分析。 数据示意:具有多个代码: # -*- coding: utf-8 -*- """ Created on Sun Nov 12 11:19:03 2017 a…

vue项目android,Android与Vue项目交互

1. Android代码class MainActivity : AppCompatActivity() {private lateinit var callJSBtn: Buttonprivate lateinit var webView: WebViewprivate var ajObject: AjObject AjObject()override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceSt…

updatebyprimarykeyselective返回什么是成功_嫦娥五号发射升空成功!!!

嫦娥五号探测器发射成功1聚焦发射当时2020年11月24日4时30分,我国在中国文昌航天发射场,用长征五号遥五运载火箭成功发射探月工程嫦娥五号探测器,火箭飞行约2200秒后,顺利将探测器送入预定轨道,开启我国首次地外天体采…

荣耀v40搭载鸿蒙吗,荣耀V40照常发布,将更换操作系统,同nova8搭载鸿蒙2.0发布...

荣耀系列手机的发布节奏有一定程度的变动,例如荣耀Magic3发布推迟,但是根据消息称,荣耀V40还会照常发布。根据目前华为内部关于麒麟9000的分配来看,主要还是对Mate40和P40使用,其他型号中:nova8 Pro 、荣耀…