我正在使用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的已知问题吗?
答案 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断言将捕获您的错误,如此。