c++ - 如何在 Visual Studio 和 C++ 中使用 emxArray_cell_wrap_0?
问题描述
我用于编码器的 Matlab 脚本是:
function [B,N]=run_bwboundaries(im)
if coder.target('MATLAB')
else
coder.rowMajor;
[B,~,N]=bwboundaries(im);
end
我希望 run_bwboundaries 接受任何尺寸的图像,例如 25x 52 图像的 100x100 图像
我在 Matlab 中尝试了以下操作:
ARGS=cell(1,1);
ARGS{1}=coder.typeof(0, [Inf,Inf], [1,1]);
codegen -config:dll run_bwboundaries -args ARGS -report
然后我在生成的头文件 run_bwboundaries.h 中看到:
extern void run_bwboundaries(const emxArray_real_T *im, emxArray_cell_wrap_0 *B, double *N)
但是当我在 C++ 中尝试以下操作时,我得到unhandled exception access violation reading location error
:
run_bwboundaries_initialize();
cv::Mat im=cv::imread("input.bmp");
vector<vector<double>> imvec=matTo2Dvec(im);
double **temp;
temp=new double*[im.rows];
for(int i=0;i<im.rows;i++){
temp[i]=new double[im.cols];
for(int j=0;j<im.rows;j++){
temp[i][j]=imvec[i][j];
}
}
double* mat_ptr=&temp[0][0];
emxArray_real_T *emx = emxCreateWrapper_real_T(mat_ptr, im.rows, im.cols);
double N=0;
emxArray_cell_wrap_0 *pCW = emxCreate_cell_wrap_0(0,1);
run_bwboundaries(emx, pCW, &N);
std::cout << "N is " << N << "\n";
解决方案
嗯……
1.
for(int i=0;i<im.rows;i++) - for(int j=0;j<im.rows;j++)
行和行?也许行和列?
尝试在内存中创建线性数组:
run_bwboundaries_initialize(); cv::Mat im=cv::imread("input.bmp", cv::IMREAD_GRAYSCALE); cv::Mat dblIm; im.convertTo(dblIm, CV_64FC1, 255, 0); emxArray_real_T *emx = emxCreateWrapper_real_T(static_cast<double*>(dblIm.data), im.rows, im.cols); double N=0; emxArray_cell_wrap_0 *pCW = emxCreate_cell_wrap_0(0,1); run_bwboundaries(emx, pCW, &N); std::cout << "N is " << N << "\n";
推荐阅读
- javascript - 我需要有关登录方法的帮助
- javascript - HTML + java中的表单控件
- c++ - 模板类没有命名类型错误,头的定义和声明分离
- c# - 无法在当前进程令牌中启用权限
- microsoft-graph-api - 使用逻辑应用中的 MS Graph 重置 Azure B2C 密码
- grafana - Grafana:更改现有 api key 的角色
- react-native - 为什么我的 RN 视频组件的 onLoad 事件没有触发?
- c - items[(int)(type - '1')] 在这个 printf 语句中是什么意思?
- asp.net - 为什么有些 cookie 的名称旁边有“文件系统”?
- python - Python/Jupyter Notebook 打印命令确实会破坏程序