首页 > 头条 > > 内容页

全球热资讯!c#和Python交互,完美解决Python调用OpenCV等第三方库以及分发时需配置python环境的问题

2023-07-06 14:30:35 来源:个人图书馆-行走在理想边缘 分享到:


(资料图片)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录 前言一、问题分析二、解决方案第一个问题第二个问题 三、结果及源码四、总结 前言

关于C#如何调用Python,网上提供了很多解决方案,有用ironPython的,也有把python代码打包成exe的,还有通过process类调用python的,但这些方案或多或少都有一些缺陷,比如ironPython无法调用第三方库,打包成exe运行速度太慢等。本文主要针对Process类调用python分发给别人使用时候需要安装python环境的问题提出一个解决方案。

提示:以下是本篇文章正文内容,下面案例可供参考

一、问题分析

C#如何调用Python,有一个很经典的解决方案,就是使用C#的Process类创建一个进程,这个进程实际上是为了Python解释器所开辟的,通过这个进程就可以完美调用Python代码了。这个方案的原理其实就相当于你自己使用python解释器去执行一段python代码,只不过“使用Python解释器”这个过程不是手动执行的,而是C#通过process类自动执行。关键代码见下

curPath  path  sArguments   sender strArr  sArgName   sArgName teps curPath  path  sArguments  sigter   sender, DataReceivedEventArgs e)        {            //if (!string.IsNullOrEmpty(e.Data))//如果字符串存在            //{            //    MessageBox.Show(Convert.ToString(e.Data));//显示结果            //}        }

main.py中的python代码

import cv2import sysdef add(a,b):    return (float(a) + float(b))def imgshow(path):    img = cv2.imread(path)    cv2.imshow("img",img)    cv2.waitKey()imgshow(sys.argv[1])# print(add(sys.argv[1],sys.argv[2]))# if __name__ == "__main__":#     print(add(sys.argv[1],sys.argv[2]))

点击图中的选择图片按钮,c#就会调用main.py文件,并通过opencv显示图片

四、总结

本文通过process类调用python,可以使用python的第三方库,并且分发给用户的时候也不需要安装python环境。但还有一个不足之处:图片等非字符串类型的数据传输问题。这是两个不同的进程,如何把python处理好的图片数据直接加载进c#的内存中,而不是通过文件的读取方式(这样会很慢),是后续的完善方向。 最后再列举几个还没实验过的C#调用python的思路: 1.使用 Python.NET 库:Python.NET 是一个用于在 .NET 平台上运行 Python 代码的库,它提供了 C# 和 Python 之间的接口。您可以使用 Python.NET 库,在 C# 程序中调用 Python 代码。

2.使用 Pyjion:Pyjion 是一个开源的 JIT 编译器,它可以将 Python 代码编译为 .NET 的机器码。您可以使用 Pyjion,在 C# 程序中调用编译后的 Python 代码。 P.S.需要完整代码的可以在这个链接下载,博主也需要一些积分来下载资源,感兴趣的希望能多多支持一下。完整代码下载

标签:
x 广告
x 广告

Copyright ©  2015-2022 南方科普网版权所有  备案号:粤ICP备18023326号-21   联系邮箱:855 729 8@qq.com