我在这个使用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/