opencv 如何使用Mat创建三维矩阵

cld4siwp  于 2022-11-15  发布在  其他
关注(0)|答案(3)|浏览(256)

我想用这些代码创建一个三维矩阵

int size[3] = { 100, 100,100};
cv::Mat mat3D(3, size, CV_8UC1, cv::Scalar(0));

但是在我调试代码之后,我发现

,似乎我没有得到正确的矩阵,这是什么问题?

vc9ivgsu

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;
wnrlj8wa

wnrlj8wa2#

您的代码正确。
关于调试器的输出,当处理多维cv::Mat时,这是预期的行为。cv:Mat::rows的OpenCV文档如下:* “行数和列数,或当矩阵具有2个以上维度时为(-1,-1)”*。实际上,调试器显示通道x行x列(1 x -1 x -1)的值。
您可以尝试使用以下方法枚举一些与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
cl25kdpy

cl25kdpy3#

您可以尝试以下操作:

int DImensions3D[] = { 100,100 ,100 };
cv::Mat RTstruct3D(3,DImensions3D, CV_8U, Scalar(0));

相关问题