matlab代码到opencv代码的转换

Posted

技术标签:

【中文标题】matlab代码到opencv代码的转换【英文标题】:conversion of matlab code to opencv code 【发布时间】:2014-05-13 02:54:48 【问题描述】:

我有一个 matlab 代码,其中图像 x 的大小为 512*512,M=512 和 N=512 下一步就是这个

 r=x(:, 2:N) - x(:, 1:(N-1));
 d= mean2(abs(r(:, 8:8:8*(floor(N/8)-1))));
 a= (8*mean2(abs(r)) - d)/7;

现在我必须将此步骤转换为 opencv 代码,所以我被逻辑卡住了

 cv::Mat scrImage =imread(argv[1],CV_LOAD_IMAGE_ANYCOLOR); // Read the file 
 cv::Mat dst(scrImage.size(),CV_64FC3);//Image double
 int nrows = dst.rows;
 int ncols = dst.cols*dst.channels();
 for(int j=0;j<nrows;j++)
 for(int i=0;i<ncols;i++)
 

对此有任何想法吗?在此先感谢

【问题讨论】:

抱歉,您的问题完全不清楚,即使是 matlab 和 opencv 大师,恐怕也是如此。 对不起,我编辑了这个问题,解释清楚了,你现在能帮我吗 如果答案对您没有帮助,您为什么要接受?还是做到了?重新打开这个问题有点晚了。你可以问一个不同的问题,但要注意使它与这个问题足够不同,否则它很容易被关闭为重复。 我很抱歉编辑它。实际上下面的答案是部分正确的。 【参考方案1】:

有很多方法可以做到这一点。最干净的方法是设置 ROI(感兴趣区域),然后应用矩阵运算。比如:

subtract(x(Rect(1,0,NumCols-1,NumRows)),x(Rect(0,0,NumCols-1,NumRows),R)
singleLineMask = Mat(1,NumCols,CV_8U)
for (int i=1;i<NumCols;i++)
    singleLineMask.at<int>(1,i)=1;
repeat(singleLineMask,NumRows,1,MaskImage)
d=mean(R,MaskImage)
a=(8*mean(abs(R))-d)/7

假设您在此操作之前创建 R 并计算 NumRows,NumCols 并分配 MaskImage。

【讨论】:

鉴于 Rect 的构造函数是 Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height),而 OpenCV 使用基于 0 的索引而不是基于 Matlab 的 1,那不应该是 subtract(x(Rect(1,0,NumCols-1,NumRows)),x(Rect(0,0,NumCols-1,NumRows),R) 对不起,我编辑了这个问题,解释清楚了,你现在能帮我吗 我的回答还是正确的,我会根据你的修改进行编辑,但你只是添加了更多的行。你不需要使用那个逻辑 为什么你要使用 singleLineMask = Mat(1,NumCols,CV_8U), rows=1 和 singleLineMask.at(1,i)=1 为什么它等于 1。

以上是关于matlab代码到opencv代码的转换的主要内容,如果未能解决你的问题,请参考以下文章

将 Opencv hsv 转换为 Matlab Hsv

matlab 图像和 opencv 图像的相互转换

如何像matlab一样检测opencv中的角点?

Matlab 到 Opencv 的转换问题

来自opencv和Matlab的Sobel滤波器输出不同

定点 MATLAB DSP 算法