我正在使用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断言会捕获您的错误。