我有一个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++)
{
}}
有什么想法吗?提前感谢
有很多方法可以做到这一点。最干净的方法是设置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。