我想用这些代码创建一个三维矩阵
int size[3] = { 100, 100,100}; cv::Mat mat3D(3, size, CV_8UC1, cv::Scalar(0));
但是在我调试代码之后,我发现,似乎我没有得到正确的矩阵,这是什么问题?
vc9ivgsu1#
您的代码看起来没有问题,可能是调试器误解了。这段代码很好地显示了24个元素(我更改了维度,使矩阵更小)
int size[3] = { 2, 3, 4}; cv::Mat mat3D(3, size, CV_8UC1, cv::Scalar(0)); std::cout << "Total size " << mat3D.size << std::endl; int counter = 0; for(cv::MatConstIterator_<uchar> it = mat3D.begin<uchar>(); it != mat3D.end<uchar>(); ++it){ std::cout << " " << (int) *it; counter ++; } std::cout << std::endl; std::cout << counter << " elts" << std::endl;
wnrlj8wa2#
您的代码正确。关于调试器的输出,当处理多维cv::Mat时,这是预期的行为。cv:Mat::rows的OpenCV文档如下:* “行数和列数,或当矩阵具有2个以上维度时为(-1,-1)”*。实际上,调试器显示通道x行x列(1 x -1 x -1)的值。您可以尝试使用以下方法枚举一些与cv::Mat相关的属性:
cv:Mat::rows
cv::Mat
std::cout << "dims : " << mat3D.rows << "\nchannels() : " << mat3D.channels() << "\nrows : " << mat3D.rows << "\ncols : " << mat3D.cols << "\nsize() : " << mat3D.size() << "\nsize : " << mat3D.size;
您的输出应为:
dims : 3 channels() : 1 rows : -1 cols : -1 size() : [-1 x -1] size : 1000 x 100 x 100
cl25kdpy3#
您可以尝试以下操作:
int DImensions3D[] = { 100,100 ,100 }; cv::Mat RTstruct3D(3,DImensions3D, CV_8U, Scalar(0));
3条答案
按热度按时间vc9ivgsu1#
您的代码看起来没有问题,可能是调试器误解了。
这段代码很好地显示了24个元素(我更改了维度,使矩阵更小)
wnrlj8wa2#
您的代码正确。
关于调试器的输出,当处理多维cv::Mat时,这是预期的行为。
cv:Mat::rows
的OpenCV文档如下:* “行数和列数,或当矩阵具有2个以上维度时为(-1,-1)”*。实际上,调试器显示通道x行x列(1 x -1 x -1)的值。您可以尝试使用以下方法枚举一些与
cv::Mat
相关的属性:您的输出应为:
cl25kdpy3#
您可以尝试以下操作: