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

时间:2015-05-04 12:07:30

标签: c++ opencv mat

我正在使用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)访问Mat的方法at<>()的偏移量为+1,这对我来说很奇怪。我错过了什么或者是OpenCv的已知问题吗?

1 个答案:

答案 0 :(得分:2)

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

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