C++ on Opencv 3

C++ on Opencv 3

本文关键字:Opencv on C++      更新时间:2023-10-16

我不擅长c++,但我正在开始学习。我通过看别人的代码来学习。

我正在查看openv上的SVM教程

我不明白

上的部分

(Mat_(1、2)& lt; & lt;

j,我);
  1. Mat_(1,2)是什么意思?具体来说_代表什么?

  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;
         }
    
  1. (Mat_<float>(1,2) << j,i):创建一个1 × 2的矩阵,并填充ij的值。
  2. 函数cv::Mat::operator()要求您指定行(i)和列(j),但是进入函数predict()的数据只是使用其他顺序。从教程:

[…遍历图像,将其像素解释为笛卡尔平面上的点。[…]

c++中的名字可以有下划线。"Mat_"是函数的普通名称。在这种情况下,Mat_与Mat类相关,但不相同。它用于创建类型为Mat的矩阵,同时指定其特征。

在这个特殊的例子中,sampleMat对象将有1列和2行,所以它看起来像一个2维的向量,值(j,i)将被分配给它。

更具体地说:

  • Mat_为函数名
  • <float>是模板类型,指定矩阵将包含什么样的元素
  • (1,2)是初始化参数,它创建一个一列两行矩阵。
  • <<是一个重载操作符,表示矩阵初始化时将赋给以下参数
  • j,i是赋给矩阵
  • 的两个参数