Скопировать матрицу в подмножество другой матрицы - PullRequest
2 голосов
/ 05 октября 2011

Мне трудно скопировать подмножество матрицы в другую большую матрицу, используя OpenCV в C ++.

Я попробовал следующий код:

#include <opencv2/opencv.hpp>

void printMatrix(const cv::Mat &M, std::string matrix)
{
    printf("Matrix \"%s\" is %i x %i\n", matrix.c_str(), M.rows, M.cols);
    std::cout << M << std::endl;
}

int main(int argc, char ** argv)
{
    cv::Mat P0(3, 4, CV_32F);
    printMatrix(P0, "P0 Initial");

    cv::Mat R0 = cv::Mat::eye(3,3,CV_32F);
    printMatrix(R0, "R0 I");

    R0.copyTo(P0.colRange(0,2));
    printMatrix(P0, "P0 with R");

    return 0;
}

, который производит следующий вывод:

Matrix "P0 Initial" is 3 x 4
[-4.3160208e+008, -4.3160208e+008, -4.3160208e+008, -4.3160208e+008;
-4.3160208e+008, -4.3160208e+008, -4.3160208e+008, -4.3160208e+008;
-4.3160208e+008, -4.3160208e+008, -4.3160208e+008, -4.3160208e+008]

Matrix "R0 I" is 3 x 3
[1, 0, 0;
0, 1, 0;
0, 0, 1]

Matrix "P0 with R" is 3 x 4
[-4.3160208e+008, -4.3160208e+008, -4.3160208e+008, -4.3160208e+008;
-4.3160208e+008, -4.3160208e+008, -4.3160208e+008, -4.3160208e+008;
-4.3160208e+008, -4.3160208e+008, -4.3160208e+008, -4.3160208e+008]

Пока предполагает, что операция копирования ничего не делает.

Я нашел похожий пост здесь , но обновление соответствующей строки следующим образом, как предлагается в этом посте, все еще приводит к тому же выводу.

//R0.copyTo(P0.colRange(0,2));
cv::Mat dest = P0.colRange(0,2);
printMatrix(P0, "P0 with R");

1 Ответ

4 голосов
/ 05 октября 2011

Ваш код не компилируется для меня.Я получаю ошибку на R0.copyTo(P0.colRange(0,2)); (а также, если я пытаюсь R0.copyTo(P0.colRange(0,3));, который имеет правильный диапазон.) Но это работает для меня:

    cv::Mat dest(P0.colRange(0,3));
    R0.copyTo(dest);
    printMatrix(P0, "P0 with R");

У вас почти это было в вашем последнем примере кода,но вы пропустили copyTo (и ваш диапазон был неверным).

...