在 vb.net 中使用 MATLAB 函数

Posted

技术标签:

【中文标题】在 vb.net 中使用 MATLAB 函数【英文标题】:Using MATLAB functions in vb.net 【发布时间】:2014-01-23 12:50:45 【问题描述】:

我是 VB.net 的新手,但我必须为我们的项目这样做。我做了一个非常简单的程序来调用我在 vb.net 中制作的 matlab 函数。这个程序很简单,它只需要确定图片框中图片的宽度和高度。

这是我的 matlab 代码并使用 .NET 程序集编译它以导出 .dll 文件:

function [width, height, third] = imageInfo(input)
inImage = imread(input);
[width, height, third] = size(inImage);
end

这是我的程序的 GUI:

这是我制作的vb代码:

Imports MathWorks.MATLAB.NET.Arrays
Imports MathWorks.MATLAB.NET.Utility
Imports imageInfo

Public Class Form1
    Public myImageInfo As New imageInfoClass

    Dim imageWidth As String
    Dim imageHeight As String
    Dim result As New MWNumericArray
    Dim imagePath As String

    Private Sub btnBrowse_Click(sender As Object, e As EventArgs) Handles btnBrowse.Click
        If ofdSelectPicture.ShowDialog = DialogResult.OK Then
            pbImage.Image = Image.FromFile(ofdSelectPicture.FileName)
            imagePath = "'" & ofdSelectPicture.FileName & "'"
        End If
    End Sub

    Private Sub btnProcess_Click(sender As Object, e As EventArgs) Handles btnProcess.Click
        result = myImageInfo.imageInfo(imagePath)
        tbHeight.Text = imageHeight
        tbWidth.Text = imageWidth
    End Sub
End Class

运行程序时总是出错。我希望你能帮我解决这个问题。谢谢

【问题讨论】:

如果你能说出你遇到了什么类型的错误,那真的很有帮助。是例外吗?它有消息吗?你什么时候收到这个错误? 这里是错误截图:imagizer.imageshack.us/v2/800x600q90/819/yruy.jpg我在运行程序时遇到了错误。 【参考方案1】:

这部分在这里:

result = myImageInfo.imageInfo(imagePath)

imagePath 需要是完整路径。您将其删除并添加逗号

imagePath = "'" & ofdSelectPicture.FileName & "'"

你可以试试:

imagePath = ofdSelectPicture.SafeFileName

【讨论】:

imread 需要文件名的完整路径(除非图像在当前目录中或在 MATLAB 路径中可用),但您不必将其用单引号括起来。 MWArray 桥接类负责将 .NET 字符串转换为 MATLAB 字符串。所以我认为imagePath = ofdSelectPicture.FileName 应该可以工作.. 我仍然收到错误消息:Image Info.exe 中出现“System.InvalidOperationException”类型的未处理异常附加信息:创建表单时出错。有关详细信息,请参阅 Exception.InnerException。错误是:“imageInfo.imageInfoClass”的类型初始值设定项引发了异常。 @elvinguitar 你知道如何使用调试器吗?它会对你有很大帮助。您可以在result = myImageInfo.imageInfo(imagePath) 行上放置一个断点,这将使调试器在该行执行之前停止。然后就可以看到imagePath)的值了。 @MPelletier 抱歉,但我是 vb.net 的新手,不知道如何使用调试器。只是想问一下,我的matlab代码都正确吗? 对于这部分本身我不能说,因为我不知道 Matlab。对不起。

以上是关于在 vb.net 中使用 MATLAB 函数的主要内容,如果未能解决你的问题,请参考以下文章

VB.NET中CallbyName函数的缺点?

使用vb.net在oracle中创建函数[重复]

VB.NET - 传递要在函数中使用的表达式

vb.net 如何引用自定义类库

VB.NET 函数返回

无法在 VB.NET 中使用带有来自 Visual C++ DLL 的指针参数的函数