記錄改寫MATLAB m檔案為mex檔案經過

2021-08-18 10:25:06 字數 2611 閱讀 9548

1、新建專案,專案命名,選擇 dll,空專案

2、在原始檔新增.def檔案,寫入語句:

3、新增 .cpp檔案,寫mexfunction

4、配置——專案-屬性:

(1) c/c++-常規-附加包含目錄-新增路徑」.\extern\include「——自己找到matlab對應安裝路徑

(2) c/c++-常規-配置管理器-平台-新建-x64——如果生產32位mexw檔案則不用這一步驟

(3)鏈結器-常規-輸出檔案填」.\debug\filename.mexw64「——這是生成要用的mexw檔案的設定

這是另外乙個待改寫的函式center_weight.m:

輸入影象和閾值,為所有畫素計算與大於閾值畫素的距離,進行加權,離大於閾值畫素越近,權重越大,輸出距離矩陣

function [min_c] = center_weight( img_in,yu_value )

img_in=mat2gray(img_in);

[h,w]=size(img_in);

[row,col]=find(img_in>yu_value);% 找到所有大於閾值的點,記錄座標

l=length(row);

a(1,:)=row;

a(2,:)=col;

for i0=1:h %計算影象每個點

for j0=1:w

for i=1:l %與閾值以上所有點

c_store(i)=norm(a(:,i)-[i0;j0]); %的歐式距離

endmin_c(i0,j0)=min(c_store);%min_c最小歐式距離圖

endendend

改寫成的mex

#include "mex.h"

#include //用到了sqrt()

//被呼叫的子函式:返回陣列 a 的最小值

double minum(double * a,int num)

return temp;

} // mex檔案介面函式:計算並輸出「距離」矩陣

void mexfunction(int nlhs, mxarray *plhs, int nrhs, const mxarray *prhs)

} //為要用到的變數分配空間,如果沒有分配空間,matlab會崩潰

int *row=(int *)mxcalloc(num,sizeof(int));

int *col=(int *)mxcalloc(num,sizeof(int));

double *c_store=(double *)mxcalloc(num,sizeof(double));

//找大於閾值的畫素的座標

int k=0;

for (i=0;iyu_value)

} double temp;

for(i=0;imexfunction(int nlhs, mxarray *plhs, int nrhs, const mxarray *prhs) //左個數、左指標;右個數、右指標

mxgetpr()獲取引數指標,

*()獲取指標值,

mxgetdimensions()獲取矩陣維度,

mxcreatedoublematrix()構建矩陣

記錄將FLANN演算法編譯成MEX檔案的過程

在重現文章 vocmatch efficient multiview correspondence for structure from motion 所做的研究工作中,我們遇上了如何將flann演算法的c 轉換成mex檔案的問題。我們使用的軟體是matlab r2015b以及msvc2010。利用...

Python記錄4 檔案操作

檔案 1.什麼是檔案 檔案是作業系統為使用者 應用程式提供一種操作硬碟的虛擬單位 2.為何要用檔案 為了訪問硬碟資料 3.如何用檔案 1.開啟檔案 2.讀寫檔案 3.關閉檔案 作業系統資源 f open r c users dell desktop a.txt mode r encoding utf...

centosifcfg eth0檔案內容為空

虛擬機器安裝好centos 6系統後,發現ip在每次重啟後都會還原,用ifconfig檢視是有eth0網絡卡的 也有可能只有回環網絡卡lo 於是檢視eth0網絡卡配置檔案,發現在 etc sysconfig network scripts 目錄下沒有 ifcfg eth0 這個網絡卡配置檔案。是因為...