Opencv 行方法有一个奇怪的行为

Opencv row method has a strange behavior

我正在使用 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) 总是 returns 0 并且使用 row(1)...row(n) 访问 Mat 相对于方法 at<>() 有 +1 的偏移量,这看起来很奇怪大部头书。我是不是遗漏了什么或者是 OpenCv 的已知问题?

看看Mat::zeros(),你的称呼方式是rows = 100cols = 1。当您使用 i = 0 调用 values.at<float>(i, 1) 时,您正在访问第 0 行和第 1 列的元素,这当然超出了您的 Mat.

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