vb.net - 如何从VB.net轻松调用IronPython函数?

标签 vb.net function opencv ironpython emgucv

我在这个使用emgucv(.net的opencv包装器)的程序中挣扎了大约2周。不幸的是,问题不是编程,而是以一种可行的方式设置emgucv。我没有为vb.net做到这一点,所以我尝试为ironpython这样做(因为我也知道python)。 Emgucv在使用ironpython时似乎可以完美地工作,因此我创建了一个函数,该函数将图像作为参数并按照我想要的方式对其进行分析,并返回其中包含结果的另一个图像。问题是我想调用此函数,从VB.net中给它提供图像参数(它可能是包含路径的字符串),并成为另一个包含结果图像作为返回值的字符串。稍后我计划将该项目打包在安装程序中,以便我可以重新分发它。

所以我问你们:您知道一种简单的方法来调用VB.net中的IronPython函数,这样我也可以打包整个项目并将其重新分发给人们吗?

非常感谢您阅读本文,如果您也可以帮助我解决我的问题,那就太好了! :)

最佳答案

虽然IronPython不是我的专长,但我对EMGU及其应用程序非常熟悉。如果您坚持使用IronPython,则以下网站清楚地说明了如何将字符串传递给IronPython Class.

以下代码是从链接中获取的,而不是我自己的:

Option Explicit On
Option Strict On

Imports Microsoft.Scripting.Hosting
Imports IronPython.Hosting
Imports IronPython.Runtime.Types

Module Module1
    Sub Main()
        Dim helloWorld As New HelloWorldVB()
        Console.WriteLine(helloWorld.HelloWorld("Maurice"))

    Dim runtime As ScriptRuntime = PythonEngine.CurrentEngine.Runtime
    Dim scope As ScriptScope = runtime.ExecuteFile("HelloWorld.py")
    Dim pythonType As PythonType = scope.GetVariable(Of PythonType)("HelloWorldIronPython")
    helloWorld = CType(runtime.Operations.Call(pythonType), HelloWorldVB)
    Console.WriteLine(helloWorld.HelloWorld("Maurice"))

    Console.ReadLine()
End Sub
End Module

我将通过链接关注该教程,但是重要的代码如下,因为这会导入IronPython的require运行时信息:
**Imports Microsoft.Scripting.Hosting
Imports IronPython.Hosting
Imports IronPython.Runtime.Types**


 **Dim runtime As ScriptRuntime = PythonEngine.CurrentEngine.Runtime
    Dim scope As ScriptScope = runtime.ExecuteFile("HelloWorld.py")
    Dim pythonType As PythonType = scope.GetVariable(Of PythonType)("HelloWorldIronPython")
    helloWorld = CType(runtime.Operations.Call(pythonType), HelloWorldVB)
    Console.WriteLine(helloWorld.HelloWorld("Maurice"))**

显然,Console.WriteLine(helloWorld.HelloWorld(“Maurice”))将被更正为:

昏暗的result_location为String = helloWorld.HelloWorld(“Maurice”)

其中“Maurice”是包含您的图像位置的字符串。

现在,我要问的是您在Visual Studio中设置EMGU时遇到的问题,我知道特别是对新手来说这可能会令人沮丧。如果您愿意,我很乐意帮助您正确设置它。我问的原因是因为您是向最终用户提供此代码的,因此无需调用IronPython,代码可能会更高效。尤其是由于每个过程都需要从硬盘驱动器进行读取和写入。

首先,我将假定您在项目中包含对Emgu.CV,Emgu.CV.UI和EMGU.Util的引用。但是必须将“opencv_core220.dll”,“opencv_imgproc220.dll”文件直接添加到项目中,并确保在属性窗口中将“复制到输出”选项设置为“始终复制”。如果不是,您将得到不具有正确格式的图像等错误。您只需要这两个.dll即可读取图像并访问数据,等等,例如,可能需要其他.avi电影。请注意,这两个.dll现在必须随您的项目一起分发,以使其起作用。

请注意,这可能会有所不同,具体取决于您使用的是64位还是32位,但是64位EMGU版本将无法在X86计算机上运行。您还必须确保目标平台在Visual Studio中是正确的。

我希望这可以帮助你,

干杯
克里斯

关于vb.net - 如何从VB.net轻松调用IronPython函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7112024/

相关文章:

c - 在函数中打开二进制文件?请参阅代码 :

python - 如何使用 Python OpenCV 在图像中查找单个数字?

c# - 我如何(优雅地)将文本框转置到字符串特定部分的标签上?

vb.net - 是否有与 C# 输出参数等效的 VB.NET?

r - 使用 group_map 将函数应用于分组小标题中的每个组

c - 使我的函数同时播放两个序列

c++ - 检查相机标定效率,用opencv

android - 如何在openCV android应用程序中跳过帧?

mysql - VB.NET学分系统

xml - 解析 XML 文件中的特定标签