[英]cv::Mat initialization using array
例如,通過初始化后,我遇到了奇怪的行為
#include <iostream>
#include <opencv2/opencv.hpp>
int main() {
cv::Mat h = cv::Mat(2, 2, CV_32F, {1.0, 2.0, 1.0, 0.0});
std::cout << h << std::endl;
return 0;
}
cout打印出[1,1; 1,1]。 WTF剛發生? 我在ubuntu,gcc版本5.4,OpenCV 3.2上使用eclipse
您沒有使用有效的Mat
構造函數。 您有幾種選擇:
從數組中:
float pf[] = { 1.f, 2.f, 3.f, 4.f }; Mat1f m1(2, 2, pf);
要么
std::vector<float> vf = { 1.f, 2.f, 3.f, 4.f }; Mat1f m2(2, 2, vf.data());
使用逗號初始值設定項:
Mat1f m3 = (Mat1f(2, 2) << 1.f, 2.f, 3.f, 4.f);
如果矩陣很小,則可以使用Matx
:
Matx22f m4(1.f, 2.f, 3.f, 4.f);
請注意, Mat1f
是Mat_<float>
的typedef,它是CV_32FC1
類型的Mat
。
使用您的方法不起作用,因為{1.0, 2.0, 1.0, 0.0}
構造cv::Scalar
,因此您調用了構造函數Mat(int rows, int cols, int type, cv::Scalar)
。 由於只有一個通道,因此矩陣將使用此標量的第一個值初始化,這是初始化程序列表中的第一個值。
請注意,這只是一個巧合,因為您的矩陣有4個元素( Scalar
支持的最大數量)。 如果您使用更多元素:
cv::Mat h(2, 3, CV_32F, {3.f, 2.f, 1.f, 0.f, 2.f, 5.f});
該代碼不應該編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.