OpenCV 3.0.0 Mat.push_back 用于矢量线
OpenCV 3.0.0 Mat.push_back for vector line
我想使用 push_back
函数逐行程序构建 OpenCV
Mat
。
#include <iostream>
#include <stdbool.h>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
using namespace std;
using namespace cv;
int main(){
Mat matrix(1,3,CV_8UC1);
vector<unsigned char> line(3,1);
matrix.push_back(Mat(line,true).t());
return 0;
}
这个returns下面的错误
OpenCV Error: Assertion failed (DataType<_Tp>::type == type() && cols == 1) in push_back, file /usr/local/include/opencv2/core/mat.inl.hpp, line 1071 terminate called after throwing an instance of 'cv::Exception'
what(): /usr/local/include/opencv2/core/mat.inl.hpp:1071: error: (-215) DataType<_Tp>::type == type() && cols == 1 in function push_back
我已通过为每个矩阵调用 type()
来保证类型相等,并且我可以使用 push_back(Mat(line,true))
(无矩阵转置),但结果是添加了列
[1;
1;
1;]
错误似乎暗示我只能逐列添加元素(cols == 1
位),但方法描述说它将元素添加到矩阵的底部(暗示它添加行)
对于这种情况是否有任何解决方法,或者必须这样做?
正如 berak 在错误报告 link(http://code.opencv.org/issues/4340) 中提到的那样,分两行执行即可根据需要解决问题。
#include <iostream>
#include <stdbool.h>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
using namespace std;
using namespace cv;
int main(){
Mat matrix(1,3,CV_8UC1);
vector<unsigned char> line(3,1);
Mat line_m(line,true);
line_m=line_m.t();
matrix.push_back(line_m);
return 0;
}
结果来自 cout<<matrix<<endl;
[0 0 0;
1 1 1]
我想使用 push_back
函数逐行程序构建 OpenCV
Mat
。
#include <iostream>
#include <stdbool.h>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
using namespace std;
using namespace cv;
int main(){
Mat matrix(1,3,CV_8UC1);
vector<unsigned char> line(3,1);
matrix.push_back(Mat(line,true).t());
return 0;
}
这个returns下面的错误
OpenCV Error: Assertion failed (DataType<_Tp>::type == type() && cols == 1) in push_back, file /usr/local/include/opencv2/core/mat.inl.hpp, line 1071 terminate called after throwing an instance of 'cv::Exception'
what(): /usr/local/include/opencv2/core/mat.inl.hpp:1071: error: (-215) DataType<_Tp>::type == type() && cols == 1 in function push_back
我已通过为每个矩阵调用 type()
来保证类型相等,并且我可以使用 push_back(Mat(line,true))
(无矩阵转置),但结果是添加了列
[1;
1;
1;]
错误似乎暗示我只能逐列添加元素(cols == 1
位),但方法描述说它将元素添加到矩阵的底部(暗示它添加行)
对于这种情况是否有任何解决方法,或者必须这样做?
正如 berak 在错误报告 link(http://code.opencv.org/issues/4340) 中提到的那样,分两行执行即可根据需要解决问题。
#include <iostream>
#include <stdbool.h>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
using namespace std;
using namespace cv;
int main(){
Mat matrix(1,3,CV_8UC1);
vector<unsigned char> line(3,1);
Mat line_m(line,true);
line_m=line_m.t();
matrix.push_back(line_m);
return 0;
}
结果来自 cout<<matrix<<endl;
[0 0 0;
1 1 1]