[英]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)
始終返回0,並且使用row(1)...row(n)
訪問Mat相對於at<>()
方法而言偏移為+1,這對我來說似乎很奇怪。 我是否缺少某些東西,或者是OpenCv的已知問題?
看一下Mat::zeros()
,您的調用方式是rows = 100
cols = 1
。 當您使用i = 0
調用values.at<float>(i, 1)
,您將訪問第0行和第1行的元素,這當然超出Mat的范圍。
將values.at<float>(i, 1)
更改為values.at<float>(i, 0)
並在Debug模式下運行構建,以供以后參考,其中OpenCV斷言將捕獲此類錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.