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)
哪一种有意义。。。
相关文章:
- std::bind to void* to std::function
- std::time_point from and to std::string
- Port pthread_cond_broadcast to std::atomic
- File to std::string_view
- 如何修复以下错误"no match for call to '(std::tr1::shared_ptr<_iobuf*>) (FILE*&)'"
- std::map to std::list leads to SIGSEGV
- NSMutableArray to std::vector
- std::string to std::regex
- BOOST :: lexical_cast to std ::字符串失败
- 最快的方式 std::vector<Derived> to std::vector<Base>
- 切片std :: out_of_range to std ::异常在Visual Studio vs G 中
- std::vector< MyObj* > to std::vector< MyObj Const * >,如何无循环?
- 消除"conversion to std::vector<int>::size_type to int"警告
- 尝试用C++编码时,我收到一长串错误,例如"/tmp/ccloHU4h.o:dad.cpp:(.text+0x5c): undefined reference to `std::cout'"
- How to std::forward( *this )
- "cannot convert argument 1 from 'Node<T>' to 'std::nullptr_t"编译器错误
- CString to std::string or sql::SQLString conversion - C++
- Append to std::array
- nameless char[] to std::string& reference
- 我越来越"invalid conversion from `void*` to `std::complex<double>*"