zeb*_*bra 20 c++ matlab opencv computer-vision
我注意到Matlab在计算机视觉和图像处理领域仍然非常受欢迎,直到今天,尽管OpenCV是一个非常成熟的C++包.我从来没有使用过Matlab,但看看它我认为在C++中没有OpenCV的优势.它是如此常用,但我正在考虑把它拿起来.
为什么它在这群人中如此受欢迎?它比OpenCV有什么优势?
Oli*_*Oli 47
我是计算机视觉的博士生,在这个问题上我已经回答了matlab和python之间科学家的比较: MATLAB的优点是什么?为什么大学如此使用?什么时候比Python好?
我将更新我的答案,以便在matlab和opencv之间进行计算机视觉比较:
我以前只使用C++/OpenCV编码,但自从开始我的博士(3年一次),我只在Matlab中编码.所以我很清楚这个话题.
与opencv相比,matlab如此优秀和广泛使用有一个原因:
就个人而言,我在matlab中的编码速度比在OpenCV/C++中快10倍,并且最终的bug要少得多.
在研究环境中,我们(希望)经常有新的想法,我们想要快速测试它们,看看它是否值得继续朝这个方向发展.而且大多数情况下,我们编码的内容中只有一小部分是有用的.此外,通常不可能事先猜测一个想法是否会起作用.
Matlab 在执行时通常会慢一点,而opencv绝对是运行时间最快的,但我们并不在意.因为我们事先不知道哪种方法会成功,所以我们必须尝试很多东西,所以我们的瓶颈就是编程时间,因为我们的代码通常运行几次才能将结果发布,这就是所有.
那么让我们看看matlab如何帮助改善编程时间.
Matlab确实有很多我需要的功能,所以我不必一直重新发明它们:
将矩阵的索引更改为2d坐标:ind2sub提取图像的所有补丁:im2col; 计算图像的直方图:hist(Im(:)); 找到列表中的唯一元素unique(list); 向矩阵的所有向量添加向量bsxfun(@plus,M,V); n维数组上的卷积convn(A); 计算代码的子部分的计算时间:tic; %%code; toc; 用于裁剪图像的图形界面:imcrop(im);
列表可能很长......而且使用帮助很容易找到它们.
然而,考虑到纯计算机视觉功能,我认为核心Opencv比matlab加工具箱更详尽.但是现在,很多研究人员在matlab上发布他们的源代码,如果你想测试最新的发现,你基本上必须使用matlab.
无需分配和释放内存.Matlab为您做到了这一点,因此您可以专注于您的工作.
没有缓冲区溢出.所以,不久就试图找出它崩溃的地方.Matlab会自动停止,并告诉您代码尝试获取矩阵范围之外的值的位置.
没有编译时间......
没有标题写...
一个例子:我启动一个脚本.由于矩阵,它会产生错误.我仍然可以使用命令行执行代码.我把它想象成:imagesc(matrix).我看到矩阵的最后一行很奇怪.我修复了这个bug.所有变量仍然设置.我选择剩余的代码,按F9执行选择,一切都继续.由于这个原因,销售变得很快.
Matlab在执行之前强调了我的一些错误.所以我可以很快看到问题所在.它提出了一些方法来加快我的代码.
使用OpenCV/C++/Visual Studio,我可以调试.但是这个调试器不允许我在调试期间执行代码,因此我不能将矩阵可视化等等.所以在实践中,我必须复制粘贴一些代码来转储矩阵,以检查错误在哪里.这非常痛苦.
IDE中包含一个很棒的分析器.与此相比,KCahcegrind for C++使用起来非常痛苦.
我在那里写了更多: .m文件有替代编辑器吗?
Matlab代码更加简洁,这意味着更容易调试,阅读,理解和:代码看起来像我的公式.
为了规范化矩阵的所有列(我一直需要它),我做:
bsxfun(@times,A,1./sqrt(sum(A.^2)))
要从矩阵中删除所有小数量的colums:
A(:,sum(A)<e)=[]
要在GPU上进行计算:
gpuX = gpuarray(X);
%%% code normally and everything is done on GPU
Run Code Online (Sandbox Code Playgroud)
为了平衡我的代码:
parfor n=1:100
%%% code normally and everything is multi-threaded
Run Code Online (Sandbox Code Playgroud)
用什么语言可以打败那个?
当然,我很少需要创建循环,所有东西都包含在函数中,这使代码更容易阅读,并且没有索引的头痛.所以我可以专注于我想要编程的内容,而不是如何编程.
Matlab以其绘图工具而闻名.他们非常有帮助.OpenCV只有基本的绘图功能.
通过打字,访问它非常容易 doc
PS:我讨厌matlab:它的价格
OpenCV的C++ API相当新颖.此外,它出现时有很多错误,现在它更加明确了.在此之前,使用C API,使用OpenCV编写代码非常痛苦.例如,你不能轻易访问矩阵单元,IplImage和其他矩阵之间存在差异,并且没有矩阵表达式.
我认为这是大多数人在计算机视觉中仍然坚持"快速开发的Matlab"理念的主要原因.确实,对于现在的大多数cv任务来说,C++和OpenCV中的代码不需要比Matlab更长的时间/更多的负担或更多的代码行.
但是使用Matlab的理由多于:
我想补充一点,我觉得很遗憾整个研究界都停留在一个专有的环境中,那里有免费和好的替代品.
| 归档时间: |
|
| 查看次数: |
15205 次 |
| 最近记录: |