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