C++ 如何在以下代码中将Mat_uu转换为Mat?

C++ 如何在以下代码中将Mat_uu转换为Mat?,c++,opencv,C++,Opencv,下面是opencv SVM教程的一个片段。在这段代码中,有一行代码'Mat sampleMat=(Mat_(1,2)直接设置值: Mat sampleMat(1, 2, CV_32F); sampleMat.at<float>(0,1) = j; sampleMat.at<float>(0,2) = i; 感谢您这么快回复我,我希望使用Mat。at在调试模式下速度很慢,因为它在那里进行边界检查。但是在发布时速度很快。所以不用担心使用它!我添加了带有ptr的版本。我通常总

下面是opencv SVM教程的一个片段。在这段代码中,有一行代码'Mat sampleMat=(Mat_(1,2)直接设置值:

Mat sampleMat(1, 2, CV_32F);
sampleMat.at<float>(0,1) = j;
sampleMat.at<float>(0,2) = i;

感谢您这么快回复我,我希望使用Mat。at在调试模式下速度很慢,因为它在那里进行边界检查。但是在发布时速度很快。所以不用担心使用它!我添加了带有
ptr
的版本。我通常总是使用
ptr
,但我认为带有
at
的版本在一开始时就更清晰了“@ChronoTrigger再次感谢您……您让我通过了第一部分,即矩阵,但可能需要帮助将数据分配给pmat[0]和pmat[1],似乎我必须将它们转换为Vec3b,但无法解决……在所有四个赋值上都出现这样的错误
无法转换'cv::Vec3b{aka cv::Vec}”'到分配pmat[0]=blue中的'float',
您的第一个代码和第二个代码根本不相同。在第一个代码中,您使用值
[j,i]
创建
sampleMat
,在第二个代码中使用值
[i,j]
。然后,您需要在
if
语句之间使用括号。最后,在第一个代码中,您将
green
分配给另一个名为
image
的变量,但在第二个代码中,您尝试通过指针
pmat
sampleMat
执行此操作。如果
image
是RGB图像(3个通道),您必须像在第一个代码中一样访问。
 Vec3b green(0,255,0), blue (255,0,0);
    // Show the decision regions given by the SVM
    for (int i = 0; i < image.rows; ++i)
        for (int j = 0; j < image.cols; ++j)
        {

    Mat sampleMat(1, 2, CV_32F);
    float * const pmat = sampleMat.ptr<float>();
    pmat[0] = i;
    pmat[1] = j;

            float response = SVM.predict(sampleMat);

            if (response == 1)
         pmat[0]  = green;
        pmat[1] = green;
            else if (response == -1)
          pmat[0]  = blue;
             pmat[1]  = blue;
    }
Mat sampleMat(1, 2, CV_32F);
sampleMat.at<float>(0,1) = j;
sampleMat.at<float>(0,2) = i;
Mat sampleMat(1, 2, CV_32F);
float * const pmat = sampleMat.ptr<float>();
pmat[0] = j;
pmat[1] = i;
for (int i = 0; i < image.rows; ++i)
{
  Mat sampleMat(1, 2, CV_32F);
  sampleMat.at<float>(0, 2) = i;

  for (int j = 0; j < image.cols; ++j)
  {
    sampleMat.at<float>(0, 1) = j;
    ...
  }
}