Matlab自定義函式在VS中使用C 語言呼叫

2021-09-05 13:11:22 字數 834 閱讀 7802

問題描述:

之前在matlab中用到了兩個演算法,乙個用了求影象的zernike矩,乙個icp演算法。後來在vs下使用c++語言開發qt介面,嘗試將matlab的函式轉換到vs中,用了3種辦法,前後費時5天,整理一下,希望能幫助有需要的朋友。

雖然嘗試了3種方法,但只有最後1種方法實驗成功。

考慮到網上對各種方法都有很多詳盡的介紹,很多內容我就一筆帶過吧,有疑問的我再具體解答。

1.matlab coder

最開始用這種方法,程式跑了兩遍都不知道結果在哪兒看,而且陣列與影象間的轉換非常奇葩,嘗試無果,放棄。

2.mex -setup

這個方法耗時一天半,就是將上述語句在命令列中輸入,就會根據你的配置情況進行提示。

我最開始是matlab2015+vs2017,死活找不到編譯器,從官網上看是m15不支援vs17(這個對應關係一定要看好),於是後面裝了m17。

但有個邏輯沒搞清,希望有朋友可以解釋一下:大家都在強調,必須是64位對64位,32對32,我的電腦是64位,vs17只有64位,我編譯環境是64,matlab17b只找到了64,那這時候我配置是對還是錯呢。

由於各種位置的原因,用這種方法死活卡在了初始化的地方,

3.deploytool

在選單欄輸入deploytool,選擇library compile,在彈出視窗的type處選擇c++ shared library,函式處可以多選。具體操作見網上其他的描述。嘗試了發現兩個初始化都可以跑通。我重點說下我的問題:

我的函式是求影象的z矩,但是其中呼叫了另乙個.m函式,之前沒注意,一直得不到正確的結果。發現之後,把另乙個函式的呼叫取消,直接把**整合在乙個.m檔案裡,執行,成功。

開心。

Matlab 自定義函式擬合

randomaccess j0237 2 reference basketballpass,bqsqare,blowingbubbles,racehorses,close all clear all rd 1507.09 40.64 755.76 36.89 376.83 33.56 196.96 ...

matlab學習 matlab自定義函式的編寫

判斷乙個數是否為素數 function p myprime a for i 2 a 1if 0 rem a,i p 0 break elseif i a 1 p 1 endend 測試 clc n input 請輸入乙個數 res myprime n if res 1disp 是素數 else di...

Matlab自定義初始化函式

有時候,有些輸出的初始化不能在模型中直接設定,這時候可以通過設定模型引數配置。開啟 configuration parameters code generation custom code 選項卡,在右側的上半部分 insert custom c code in generated 選項卡裡選擇 i...