OpenCV / C ++中的MATLAB sub2ind / ind2sub

时间:2014-02-11 18:11:21

标签: c++ algorithm matlab opencv image-processing

OpenCV中是否有与MATLAB的sub2indind2sub函数相同的函数?我需要两个函数用于我的C ++应用程序。 如果OpenCV缺少这些函数,是否有任何C ++库提供相同的功能?

2 个答案:

答案 0 :(得分:8)

你可以自己写一下:

int sub2ind(const int row,const int col,const int cols,const int rows)
{
   return row*cols+col;
}

void ind2sub(const int sub,const int cols,const int rows,int &row,int &col)
{
   row=sub/cols;
   col=sub%cols;
}

答案 1 :(得分:0)

这是我的2D矩阵代码。 我测试了它。

cv::Mat Utilities::Sub2Ind(int width, int height, cv::Mat X, cv::Mat Y)
{
    /*sub2ind(size(a), rowsub, colsub)
    sub2ind(size(a), 2     , 3 ) = 6
    a = 1 2 3 ;
    4 5 6
    rowsub + colsub-1 * numberof rows in matrix*/

    std::vector<int> index;
    cv::transpose(Y,Y);
    cv::MatConstIterator_<int> iterX = X.begin<int>(), it_endX = X.end<int>();
    cv::MatConstIterator_<int> iterY = Y.begin<int>(), it_endY = Y.end<int>();
    for (int j = 0; j < X.cols; ++j,++iterX)    
    {
        //running on each col of y matrix
        for (int i =0 ;i < Y.cols; ++i,++iterY )
        {   
            int rowsub = *iterY;
            int colsub = *iterX;
            int res = rowsub + ((colsub-1)*height);
            index.push_back(res);
        }
        int x = 5;
    }   
    cv::Mat M(index) ;
    return M;   
}