[blog 项目实战派]opencv通过dll调用matlab函数,图片作为参数
前文介绍了如何“csharp通过dll调用opencv函数,图片作为参数”。而在实际的代码编写过程中,很多时候想把已经写好的matlab函数融合进去,但是依然是将图片作为参数传递比较成为问题。这里我经过一段时间的研究解决了这个问题(目前只解决了灰度图片下的图片传递问题)。这个问题包含几个难点,一个是mxmatrix的使用,一个是matlab和opencv对于图片的格式处理是不一样的。
本次这个项目,是opencv通过调用matlab里面实现的Frangi函数,对图像进行Frangi滤波处理,并且最后在opencv中显示出来。
首先是修改Frangi函数,也就是调整参数,用图片作为输入和输出,一定要保证修改后的程序是正确的
function [outIm] ], , ., , ));
sigmas ;
c ;
)))) ;
S2 ;
);
);
end
,
[outIm,whatScale] );
outIm )
whatScale )
Direction :numel(I))'+(whatScale(:)-1)*numel(I)),size(I));
end
else
outIm = reshape(ALLfiltered,size(I));
if(nargout>1)
whatScale = ones(size(I));
end
if(nargout>2)
Direction = reshape(ALLangles,size(I));
end
end
sigmas ;
c ;
)))) ;
S2 ;
);
);
end
,
[outIm,whatScale] );
outIm )
whatScale )
Direction :numel(I))'+(whatScale(:)-1)*numel(I)),size(I));
end
else
outIm = reshape(ALLfiltered,size(I));
if(nargout>1)
whatScale = ones(size(I));
end
if(nargout>2)
Direction = reshape(ALLangles,size(I));
end
end
片对代码进行编译。要注意这里是 -W lib:GOFrangi 而不是 -W cpplib:GOFrange
mcc -W lib:GOFrangi -T link:lib GOFrangi.m -C
拷贝这四个文件放到opencv目录下
系统相关设置
还有
还有
);
imshow(;
}
,;i;j;
}
}
waitKey();
;
}
imshow(;
}
,;i;j;
}
}
waitKey();
;
}
生成结果