преобразование cv :: Mat_ в std :: vector - PullRequest
0 голосов
/ 23 марта 2011

Я использую OpenCV 2.0, в классе cv::Mat_<_Tp> есть метод:

// conversion to vector.
operator vector<_Tp>() const;

При реализации реализация не компилируется в MSVS 2005:

template<typename _Tp> inline Mat_<_Tp>::operator vector<_Tp>() const
{
    CV_Assert( rows == 1 || cols == 1 );
    return isContinuous() ? vector<_Tp>((size_t)(rows + cols - 1), (_Tp*)data) :
        (vector<_Tp>)((Mat_<_Tp>)this->t());
}

Isэто новый причудливый конструктор std::vector, который берет size_t и _Tp* из TR1 или что-то в этом роде?

Я думал, что они могут просто инициализировать вектор с помощью итератора:

vector<_Tp>((_Tp*)data, (_Tp*)data + rows + cols - 1)

Это ошибка, или я что-то не знаю?

UPD.Текст ошибки компилятора:

...\lib\opencv\include\opencv\cxmat.hpp(691) : error C2665: 'std::vector<_Ty>::vector' : none of the 6 overloads could convert all the argument types
        with
        [
            _Ty=double
        ]
        c:\program files\microsoft visual studio 8\vc\include\vector(473): could be 'std::vector<_Ty>::vector(__w64 unsigned int,const _Ty &)'
        with
        [
            _Ty=double
        ]
        while trying to match the argument list '(size_t, double *)'
        ...\lib\opencv\include\opencv\cxmat.hpp(689) : while compiling class template member function 'cv::Mat_<_Tp>::operator std::vector<_Ty>(void) const'
        with
        [
            _Tp=double,
            _Ty=double
        ]
        z:\dev\mine\temp\temp\entry.cpp(37) : see reference to class template instantiation 'cv::Mat_<_Tp>' being compiled
        with
        [
            _Tp=double
        ]

1 Ответ

0 голосов
/ 23 марта 2011

Нет, в C ++ 0x есть новые конструкторы из rvalues, но нет ничего похожего на тот, который используется здесь.

Если isContinuous () означает, что все значения одинаковы, вы можете использовать vector<_Tp>((size_t)(rows + cols - 1), *(_Tp*)data) для создания копий первого значения.

В противном случае ваша версия итератора кажется верной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...