2011-08-18 1 views
0

약 2 주 동안 emgucv (.net 용 opencv wrapper)를 사용하는이 프로그램에 어려움을 겪고 있습니다. 문제는 불행하게도 프로그래밍이 아니라 emgucv가 작동하는 방식으로 설정하는 것입니다. 나는 vb.net을 위해 그렇게 할 수 없었기 때문에 ironpython을 위해 그것을 시도했다. (왜냐하면 나는 파이썬도 알고 있기 때문이다.) Emgucv는 ironpython을 사용할 때 완벽하게 작동하는 것처럼 보이므로 이미지를 인수로 사용하여 원하는 방식으로 분석하여 결과가있는 다른 이미지를 반환하는 함수를 만들었습니다. 문제는이 함수를 호출하여 VB.net 내에서 이미지 인수 (경로가 포함 된 문자열 일 수 있음)를 반환하고 결과 이미지가 반환되는 다른 문자열이되도록하는 것입니다. 나중에 해당 프로젝트를 설치 패키지로 패키징하여 재배포 할 계획입니다.VB.net에서 IronPython 함수를 쉽게 호출하려면 어떻게해야합니까?

여러분에게 묻습니다. VB.net에서 IronPython 함수를 호출하는 쉬운 방법을 알고 있으므로 전체 프로젝트를 패키지로 만들어 사람들에게 다시 배포 할 수 있습니까?

이 책을 읽어 주셔서 감사 드리며 문제 해결에 도움이된다면 좋을 것입니다. :)

답변

1

IronPython은 전문 지식이 아니지만 EMGU 및 해당 응용 프로그램에 정통합니다.

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을 사용하여 주장하는 경우, 다음 웹 사이트는 명확하게 다음 코드는 링크에서 촬영 된 IronPython Class.

에 문자열을 전달하는 방법을 보여줍니다 내 자신 아니다 이 IronPython을위한 런타임을 필요로 정보를 가져로 링크하지만 중요한 코드는 우는 소리입니다 :

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

&

,363,210
**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 ("모리스는"))로 수정 될 것이다 : 문자열 = helloWorld.HelloWorld ("모리스")로

희미한 result_location

"모리스"것 이미지 위치가 포함 된 문자열이됩니다.

이제 Visual Studio에서 EMGU를 설정하는 데 발생하는 문제에 대해 물어보아야합니다. 특히 새로 익숙한 사람들에게 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에서 대상 플랫폼이 올바른지 확인해야합니다.

나는 이것이 당신이 도움이되기를 바랍니다,

건배 크리스

+0

와우, 크리스! 그것은 당신이 내게 준 커다란 회신입니다! 아주 자세하게! 나중에 링크를 확인해 볼 수는 없지만 제대로 작동 할 것 같습니다. 어쨌든,이 문장을 사용하여 시각적 기본 이미지를 만들려고 할 때마다, 내가 얻는 emgu 에러에 대해 : Dim img As New Image (Bgr, Byte 중) ("Proba1.jpg") 나는 "The type Emgu.Cv.CvInvoke에 대한 초기화 예외가 발생했습니다 또한 Visual Studio에서 Emgu.CV에서 Image 클래스에 액세스하려고 할 때마다 발생하는 Image.cs를 포함하는 새 탭을 엽니 다. 응용 프로그램? 고마워요! – Calin

+0

안녕 내가 휴가이었다 후반 응답 미안, " 'Emgu.CV.CvInvoke'의 형식 이니셜 라이저에서 예외를 Throw했습니다."출력 디렉토리에서 사용할 수없는 opencv_core220.dll 보통 다운 Action : View Detail ...에서 오류를 찾아 내면 InnerException은 아마도 { "DLL을로드 할 수 없습니다 'opencv_core220': 지정한 모듈을 찾을 수 없습니다. (HRESULT에서 예외 : 0x8007007e가) opencv_core220.dll를 "} 또는 I와 같은 유사한 당신은 추가해야했다" ","프로젝트에 직접 opencv_imgproc220.dll "파일 [계속] – Chris

+0

[] 다음 솔루션 탐색기에서 각 파일 변경을 선택 속성 창에서 "Copy to Output"속성 옵션을 항상 복사하십시오. 문제가 성가신 동안 EMGU만이 래퍼가되어 문제를 해결할 수 있으므로 원본 OpenCv 클래스 파일이 필요합니다. 이 문제가 해결 될 수 있기를 바랍니다. 축하합니다. – Chris