我不擅长c++,但我正在开始学习。我通过看别人的代码来学习。
我正在查看openv上的SVM教程
我不明白
上的部分(Mat_(1、2)& lt; & lt;
j,我);Mat_(1,2)是什么意思?具体来说_代表什么?
为什么j和i被送入矩阵?不是应该是i和j吗,其中i =行,j =列?
// Show the decision regions given by the SVM Vec3b green(0,255,0), blue (255,0,0); for (int i = 0; i < image.rows; ++i) for (int j = 0; j < image.cols; ++j) { Mat sampleMat = (Mat_<float>(1,2) << j,i); float response = svm->predict(sampleMat); if (response == 1) image.at<Vec3b>(i,j) = green; else if (response == -1) image.at<Vec3b>(i,j) = blue; }
-
(Mat_<float>(1,2) << j,i)
:创建一个1 × 2的矩阵,并填充i
和j
的值。 - 函数
cv::Mat::operator()
要求您指定行(i
)和列(j
),但是进入函数predict()
的数据只是使用其他顺序。从教程:
[…遍历图像,将其像素解释为笛卡尔平面上的点。[…]
c++中的名字可以有下划线。"Mat_"是函数的普通名称。在这种情况下,Mat_与Mat类相关,但不相同。它用于创建类型为Mat的矩阵,同时指定其特征。
在这个特殊的例子中,sampleMat对象将有1列和2行,所以它看起来像一个2维的向量,值(j,i)将被分配给它。
更具体地说:
-
Mat_
为函数名 -
<float>
是模板类型,指定矩阵将包含什么样的元素 -
(1,2)
是初始化参数,它创建一个一列两行矩阵。 -
<<
是一个重载操作符,表示矩阵初始化时将赋给以下参数 -
j,i
是赋给矩阵 的两个参数