簡體   English   中英

float cv::Mat 的訪問元素

[英]Access element of float cv::Mat

我不明白為什么我不能讓這段代碼工作:

cv::Mat M(2, 3, CV_32FC1);
cv::Point2f center(20, 20);
M = cv::getRotationMatrix2D(center, 20, 1.0);
float test;
test = M.at<float>(1, 0);
test = M.at<float>(0, 1);
test = M.at<float>(1, 1);

使用 M.at 訪問元素時代碼失敗。 出現以下斷言:

OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (unsigned)si
ze.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channel
s()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3
) - 1))*4) & 15) == elemSize1()) in unknown function, file C:\OpenCV2.2\include\
opencv2/core/mat.hpp, line 517

引用Good Will Hunting的話, “這不是你的錯!”

M已被CV_64C1double旋轉矩陣覆蓋,這就是M.at<float>(i,j)失敗的原因。

所以,不要費心初始化M cv::getRotationMatrix將處理它並返回一個CV_64F矩陣,(當然)可以使用M.at<double>(i,j)訪問該矩陣。

我對 cv 命名空間一無所知,但我會在第一次調用 M.at() 時放置一個斷點並查看 M 的成員。其中一個成員導致錯誤:

  • 暗淡 <= 2
  • 數據 == 0
  • i0 < 大小.p[0]
  • i1*DataType<_Tp>::channels < size.p[1]*channels()
  • (((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3) - 1))*4) & 15) == elemSize1() //sure hope it isn't this one

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM