如何在 OpenCV 64FC1 矩阵中设置值
How to set values in an OpenCV 64FC1 matrix
我正在尝试制作一个三行一列的矩阵,其中包含值 1、2 和 3。
int main(int argc, char *argv[])
{
cv::Mat point = cv::Mat::ones(3, 1, CV_64FC1);
point.at<double>(1,1) = 1.0d;
point.at<double>(1,2) = 2.0d;
point.at<double>(1,3) = 3.0d;
std::cout << point << std::endl;
return 0;
}
输出为:
[1
1
1]
预期的输出是:
[1
2
3]
如何在 OpenCV 矩阵中设置值?
您正在访问错误的元素。正确的方法是:
cv::Mat point = cv::Mat(3, 1, CV_64FC1);
point.at<double>(0,0) = 1.0d;
point.at<double>(1,0) = 2.0d;
point.at<double>(2,0) = 3.0d;
比这更简单:
double data[3] = {1.0d, 2.0d, 3.0d};
cv::Mat point = cv::Mat(3, 1, CV_64FC1, &data);
正如@zedv 所说,您必须使用基于 0 的索引访问矩阵元素。
创建具有已知值的矩阵的另一种方法是:
cv::Mat point = (cv::Mat_<double>(3,1) << 1, 2, 3);
另一种方法来自 OpenCv Forum,解决方案可能是:
std::vector<cv::Point3d> test;
test.push_back(cv::Point3d(0, 1, 2));
test.push_back(cv::Point3d(3, 4, 5));
cv::Mat cvt(test, false);//second param for data copy (here, data are not duplicated!)
这很漂亮 :)
我正在尝试制作一个三行一列的矩阵,其中包含值 1、2 和 3。
int main(int argc, char *argv[])
{
cv::Mat point = cv::Mat::ones(3, 1, CV_64FC1);
point.at<double>(1,1) = 1.0d;
point.at<double>(1,2) = 2.0d;
point.at<double>(1,3) = 3.0d;
std::cout << point << std::endl;
return 0;
}
输出为:
[1
1
1]
预期的输出是:
[1
2
3]
如何在 OpenCV 矩阵中设置值?
您正在访问错误的元素。正确的方法是:
cv::Mat point = cv::Mat(3, 1, CV_64FC1);
point.at<double>(0,0) = 1.0d;
point.at<double>(1,0) = 2.0d;
point.at<double>(2,0) = 3.0d;
比这更简单:
double data[3] = {1.0d, 2.0d, 3.0d};
cv::Mat point = cv::Mat(3, 1, CV_64FC1, &data);
正如@zedv 所说,您必须使用基于 0 的索引访问矩阵元素。
创建具有已知值的矩阵的另一种方法是:
cv::Mat point = (cv::Mat_<double>(3,1) << 1, 2, 3);
另一种方法来自 OpenCv Forum,解决方案可能是:
std::vector<cv::Point3d> test;
test.push_back(cv::Point3d(0, 1, 2));
test.push_back(cv::Point3d(3, 4, 5));
cv::Mat cvt(test, false);//second param for data copy (here, data are not duplicated!)
这很漂亮 :)