如何将 MATLAB 中的 detectMSERFeatures 函数转换为 C?
Posted
技术标签:
【中文标题】如何将 MATLAB 中的 detectMSERFeatures 函数转换为 C?【英文标题】:How to convert detectMSERFeatures function in MATLAB to C? 【发布时间】:2016-02-04 05:16:12 【问题描述】:我编写了一个计算机视觉代码,它使用 MSER 来检测 MATLAB 中的特征。我使用内置的“detectMSERFeatures”功能来处理本地保存的视频。现在,我想使用 MATLAB Coder 将它移植到 C 语言中。但是,MATLAB Coder 不支持此功能。我附上了输出的截图。任何帮助将不胜感激。
我的代码如下:
function count = master
% Clear workspace and Initialize Frame count
clear all;
F=0;
count=0;
% 1.Input Video Object Handler Definition
inputVideo = vision.VideoFileReader('video.mp4');
videoPlayer = vision.VideoPlayer;
% 2.Cropping Height and Width of frame. Subject to convenient
% adjustments according to the position of camera. Mainly using to
% crop out street lights from the top of the frame.
height = floor(inputVideo.info().VideoSize(2)*0.7);
width = inputVideo.info().VideoSize(1);
crop = vision.ImagePadder(...
'SizeMethod','Output size', ...
'NumOutputRowsSource','Property', ...
'RowPaddingLocation','Top', ...
'NumOutputRows', height, ...
'NumOutputColumns', width);
% 3.Frame Conversion from True Colour to Grayscale
gray = vision.ColorSpaceConverter;
gray.Conversion = 'RGB to intensity';
% 4.Implementation on individual frames till the end of video.
while(~isDone(inputVideo))
% Current Frame number
F = F + 1;
%flag=0
% Current Frame
currentFrame = step(inputVideo);
% Crop
currentFrame = step(crop, currentFrame);
% Convert to Grayscale
currentFrame = step(gray, currentFrame);
% Threshold
currentFrame(currentFrame<0.7843) = 0;
% Detect MSER Regions
regions = detectMSERFeatures(currentFrame, ...
'RegionAreaRange', [800 3000], ...
'ThresholdDelta', 4);
% Check for 'big bright blob(s)', or high incoming beam
% and output detected blob count and corresponding frame
if(regions.Count >= 2 && regions.Count <=6)
disp([regions.Count, F]);
%flag=1;
count= count+1;
end
% Port frame to player
step(videoPlayer,currentFrame);
end
%5.Release both player and video file instances
release(inputVideo);
release(videoPlayer);
我正在使用 MATLAB R2013a。
【问题讨论】:
Docs 说它支持使用“平台特定的预编译库”生成代码。你有什么问题?一些错误?哪个? "对于代码生成,函数将regions.PixelList输出为一个数组。区域大小在regions.Lengths中定义。" 你能贴出代码吗?正如@Ander 指出的那样,Coder 支持它,但有一些限制。另外,您使用的是什么版本的 Matlab? 【参考方案1】:解决此问题的唯一方法是升级到更新版本的 MATLAB。 R2013b 版本中添加了对detectMSERFeatures
的代码生成支持。
【讨论】:
以上是关于如何将 MATLAB 中的 detectMSERFeatures 函数转换为 C?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Maple 中的符号变量导出到文本文件(Matlab 格式)?