簡體   English   中英

OpenCV 2.3.1。 cv :: Mat to std :: vector cast

[英]OpenCV 2.3.1. cv::Mat to std::vector cast


我在將cv :: Mat轉換為std :: vector時遇到了麻煩:

cv::Mat m = cv::Mat_<int>::eye(3, 3);    
std::vector<int> vec = m;

給我以下內容:

OpenCV Error: Assertion failed (dims == 2 && (size[0] == 1 || size[1] == 1 || size[0]*size[1] == 0)) in create, file /build/buildd-opencv_2.3.1-11-i386-tZNeKk/opencv-2.3.1/modules/core/src/matrix.cpp, line 1225
terminate called after throwing an instance of 'cv::Exception'
  what():  /build/buildd-opencv_2.3.1-11-i386-tZNeKk/opencv-2.3.1/modules/core/src/matrix.cpp:1225: error: (-215) dims == 2 && (size[0] == 1 || size[1] == 1 || size[0]*size[1] == 0) in function create

來自mat.hpp:

template<typename _Tp> inline Mat::operator vector<_Tp>() const
{
    vector<_Tp> v;
    copyTo(v);
    return v;
}

然后執行copyTo中的以下代碼:

//mat.hpp 
template<typename _Tp> inline _OutputArray::_OutputArray(vector<_Tp>& vec) : _InputArray(vec) {}

template<typename _Tp> inline _InputArray::_InputArray(const vector<_Tp>& vec)
    : flags(STD_VECTOR + DataType<_Tp>::type), obj((void*)&vec) {}

// operations.hpp
template<typename _Tp> inline Size_<_Tp>::Size_()
    : width(0), height(0) {}

然后我得到一個例外。

任何想法? 這是一個錯誤嗎? 可能,我不明白......提前謝謝你!

您似乎正在嘗試將二維3x3矩陣轉換為一維向量。 不確定你期望得到什么結果,但你可能想要將矩陣的一行轉換為向量。 您可以通過為向量構造函數指向行數據來指定它:

int *p = eye.ptr<int>(0); // pointer to row 0
std::vector<int> vec(p, p+eye.cols); // construct a vector using pointer

那好吧!

cv :: Mat存儲為一個字節數組!
因此,如果您想將矩陣表示為向量,您可以執行以下操作:

cv::Mat m = cv::Mat_<int>::eye(3, 3);
int* data = reinterpret_cast<int*>(m.data);
int len = m.rows * m.cols;
std::vector<int> vec(len);
std::copy(data + 0, data + len, vec.begin());

從錯誤消息中,看起來你只能將一維為1的矩陣轉換為std::vector ,即只有行或列向量(從數學上講):

dims == 2 && (size[0] == 1 || size[1] == 1)

哪種有道理......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM