我正在尝试将MatLab中的代码转换为OpenCV,但我对以下几行感到困惑,因为我不太了解编程
MatLab代码:
[indx_row, indx_col] = find(mask ==1);
Indx_Row = indx_row;
Indx_Col = indx_col;
for ib = 1:nB;
istart = (ib-1)*n + 1;
iend = min(ib*n, N);
indx_row = Indx_Row(istart:iend);
indx_col = Indx_Col(istart:iend);
openCV代码:
vector <Point> index_rowCol;
for(int i=0; i<mask.rows; i++)
{
for(int j=0; j<mask.cols; j++)
{
if( mask.at<float>(i,j) == 1 )
{
Point pixel;
pixel.x = j;
pixel.y = i;
index_rowCol.push_back(pixel);
}
}
}
//Code about the "for loop" in MatLab code
for(int ib=0 ; ib<nB; ib++)
{
int istart = (ib-1)*n;
int iend = std::min( ib*n, N );
index_rowCol.clear();// Clearing the "index_rowCol" so that we can fill it again from "istart" to "iend"4
for(int j = istart; j<iend; j++)
{
index_rowCol.push_back( Index_RowCol[j] );
}
}
我无法理解它是否正常?
答案 0 :(得分:1)
我认为min功能的使用存在错误。 在这里
for ib = 1:nB;
istart = (ib-1)*n + 1;
iend = min(ib*n, N);
ib - 是数组[1,2,3..nB],你将每个值与N进行比较。结果你也得到了数组。
结果如下: ib - 是数组,istart - 是数组,也是数组。
在C ++实现中
for(int ib=0 ; ib<nB; ib++)
{
int istart = (ib-1)*n;
int iend = std::min( ib*n, N );
你使用标量(这里是ib,istars和iend是标量)。
为了更好地理解上面的代码如何使用逐步调试。 (设置断点并运行代码然后按(F10键 - 用于matlab))