C++ 如何在以下代码中将Mat_uu转换为Mat?
下面是opencv SVM教程的一个片段。在这段代码中,有一行代码'Mat sampleMat=(Mat_(1,2)直接设置值: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的版本。我通常总
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;
...
}
}