Как напечатать элемент Mat с помощью этой базовой оболочки C для объекта ptr класса C ++ Mat

0

Я пишу C-оболочку для некоторого кода OpenCV C++, и у меня есть 2 функции, которые я использую для создания объекта Mat и задают ему данные cv_create_Mat_type и cv_Mat_ptr_index соответственно. Функции такие, какими они должны быть, я не могу их изменить, потому что есть часть проекта, над которым я работаю с кем-то.

Мой вопрос заключается в том, как напечатать матрицу, заполняемую cv_Mat_ptr_index, поскольку она заполняет ее внутри цикла for. Возвращение на cv_Mat_ptr_index - это uchar * Я попытался разыменовать его, но мне нужно знать, как получить данные внутри возврата cv_Mat_ptr_index, uchar *, потому что я уверен, и исправьте меня, если я ошибаюсь, что это содержит элемент, который в настоящее время выделяется в матричный мат из массива данных в приведенном ниже коде.

Заранее благодарю за любых участников.

    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/highgui/highgui_c.h"
    #include <iostream>

    using namespace cv;
    using namespace std;



    uchar* cv_Mat_ptr_index(Mat* self, int i) {
        return self->ptr(i);
    }

    Mat* cv_create_Mat_typed(int rows, int cols, int type) {
        return new Mat(rows, cols, type);
    }

    int main(  )
    {

    float data[4][2] = { {501, 10}, {255, 10}, {501, 255}, {10, 501} };
    Mat* mat = cv_create_Mat_typed(4, 2, CV_64F);
    for(int i = 0; i < 4; i++)
        for(int j = 0; j < 2; j++)
             cv_Mat_ptr_index(mat, i)[j] = data[i][j];


    }

Редактировать:

Я пытаюсь в основном распечатать матрицу с помощью cv_Mat_ptr_index, надеюсь, пока она установит данные в матрицу "mat", но если я не могу этого сделать, я надеялся, что вы сможете показать мне, как использовать cv_Mat_ptr_index для печати содержимого матрицы "mat" "

i/e, как cout << mat; как обычно, но я не могу использовать cout << mat; потому что это указатель.

Я также надеялся, что вы можете показать мне, как напечатать элемент "mat" с ним, потому что он уже имеет доступ к объекту ptr... Я не могу изменить cv_Mat_ptr_index, хотя...

Теги:
opencv
wrapper

1 ответ

0

Mat::ptr(i) дает указатель на i й элемент в матрице, рассматриваемый как длинный одномерный вектор.

Mat::at<double>(i,0) дает ссылку на 0-й элемент i й строки матрицы, который рассматривается как 2D-матрица как нормальный, поэтому вы можете взять его адрес.

double* cv_Mat_ptr_index(Mat* self, int i) {
        return &self->at<double>(i,0);
}

Не забудьте разыграть указатель, который вы возвращаете из cv_Mat_ptr_index(...) когда вы его назначаете, например

   *cv_Mat_ptr_index(mat, i)[j] = data[i][j];
// ^-- note dereference
  • 0
    Спасибо, что обратились ко мне так скоро .... не могли бы вы увидеть мое последнее редактирование ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню