1
访问OpenCV中5D矩阵的元素时遇到问题。我创建一个使用我的矩阵OpenCV:访问5D矩阵的元素
int sizes[5] = { height_, width_, range_, range_, range_ };
Mat w_i_ = Mat(2 + channels, sizes, CV_16UC(channels), Scalar(0));
这里= 3。然后我试图使用循环来访问和修改矩阵元素渠道:
for (UINT Y = 0; Y < height; ++Y) {
for (UINT X = 0; X < width; ++X) {
// a) Compute the homogeneous vector (wi,w)
Vec3b wi = image.at<Vec3b>(Y, X);
// b) Compute the downsampled coordinates
UINT y = round(Y/sigmaSpatial);
UINT x = round(X/sigmaSpatial);
Vec3b zeta = round((image.at<Vec3b>(Y, X) - min)/sigmaRange);
// round() here is overloaded for vectors
// c) Update the downsampled S×R space
int idx[5] = { y, x, zeta[0], zeta[1], zeta[2] };
w_i_.at<Vec3b>(idx) = wi;
}
}
我得到一个断言失败错误的产生垫:: at()当我运行代码。具体来说,我得到的消息是:
OpenCV Error: Assertion failed (elemSize() == (((((DataType<_Tp>::type) & ((512 - 1) << 3)) >> 3) + 1) << ((((sizeof(size_t)/4+1)*16384|0x3a50) >> ((DataType<_Tp>::type) & ((1 << 3) - 1))*2) & 3))) in cv::Mat::at, file c:\opencv\build\include\opencv2\core\mat.inl.hpp, line 1003
我已经在网上搜索,但我似乎无法找到关于5D矩阵任何主题(类似主题证明没有帮助)。
在此先感谢
您好,感谢您的评论。算法运行时,zeta值始终在范围内。我也手动检查了这些值,它们在范围内。在第一个循环期间(zeta值{10,7,5}和w_i_的大小是{96,128,13,13,13}),错误被提出。 –