OpenCV行方法具有奇怪的行为

Opencv row method has a strange behavior

本文关键字:方法 OpenCV      更新时间:2023-10-16

我正在使用OpenCV Mat访问,并在(C )中复制。考虑以下示例:

 cv::Mat values  = cv::Mat::zeros(100, 1, CV_32FC1);
 for (int i = 0; i < 100; i++) {
       values.at<float>(i, 1) = 10 + i;
 }
 cout<<values.at<float>(0, 1)<<endl; // prints 10
 cout<<values.at<float>(1, 1)<<endl; // prints 11
 cout<<values.row(0) <<endl; // prints 0
 cout<<values.row(1)<<endl; // prints 10
 cout<<values.row(2)<<endl; // prints 11

问题在于row(0)总是返回0并使用row(1)...row(n)访问垫子的 1相对于我看上去很奇怪的方法at<>()的偏移 1。我是否缺少某些内容,或者是已知的OpenCV问题?

请查看Mat::zeros(),您称之为rows = 100 cols = 1。当您使用i = 0调用values.at<float>(i, 1)时,您将在第0行和Col 1处访问该元素,当然哪个是超出垫子的范围。

values.at<float>(i, 1)更改为values.at<float>(i, 0),为将来的参考将您的构建运行在调试模式下运行您的构建,其中OpenCV断言会捕获您的错误。