我有一个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++)
{
}}
对此有何想法?提前致谢
答案 0 :(得分:4)
有很多方法可以做到这一点。最干净的方法是设置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。