如您所知,在代码生成过程中不会输出外部函数。这些功能和/或解决方案是否有替代方案可以解决这个问题?我的代码生成错误报告如下所示:
我很惊讶我也无法输出size
和rgb2gray
。由于这些对我的计划至关重要,我无法避免。
非常感谢帮助!
答案 0 :(得分:6)
这是一个很好的问题,我经常看到类似的问题。当我开始使用MATLAB Coder时,最大的缺陷之一是不断搜索支持的函数。我同情你的挫败感,并且我有一些提示,经历过这个。
首先,对于您的直接问题,虽然编码员不支持imread
,但size
和rgb2gray
是{。}}。可能Coder抱怨这些因为他们已经从调用imread传递了mxArrays,这在外在时很好,但不适合单独生成。这只是猜测。编写代码的一个非常有用的工具是编码器支持的函数列表:List of Functions supported in MATLAB Coder
但即使有这两个,替换imread
也不是一项小任务。您必须找到另一个支持您正在使用的特定文件的库,然后使用coder.ceval将其缝合。或者,如果您可以找到它的纯MATLAB实现,那可能会有所帮助。
您的目标是纯C库还是MEX文件?如果您打算在MATLAB环境中使用此代码,则可以始终单独使用imread
,然后传递数据。
现在更一般的观察:MATLAB Coder不是一个完美的MATLAB到C翻译系统。它非常强大,而且我已经能够用它编写一些非常大的项目,但如果你想要的是能够在没有MATLAB的情况下运行任何MATLAB代码,你应该看一下MATLAB编译器,一个不同的附加组件。这里有一个非常好的Q和A:MATLAB Compiler vs MATLAB Coder
在MATLAB Coder中编写项目时,最好从头开始,因为知道你最终会定位C代码。从MATLAB到C的转换有很多陷阱,你必须在编写MATLAB代码时始终保持警惕。
一个有用的工具是右键点击"当前文件夹"列表通常位于主窗口的左侧,并选择"检查代码生成准备情况。"您将获得有关文件中潜在问题的精彩报告。我建议经常使用它。
另一个有用的工具是始终将%#codegen
标记放入代码中。这会警告MATLAB编辑器.m文件用于生成代码,因此在您编写文件时它会提供额外的上下文相关信息。这有很大帮助。
代码生成最常缺少的功能是文件IO功能。这有一些很好的理由,但它仍然令人沮丧。
当您使用外部C代码进行拼接时,可以使用coder.ceval
功能,该功能可以提供对外部库的出色访问。使用这个井是另一个主题,超出了这个问题的范围。
如果您可以确切地指出您对阅读感兴趣的文件类型(PNG,BMP,TIFF等),也许有人可能能够识别出一个好的外部库供您使用。