OpenCV cv::垫子大小限制

  • 本文关键字:cv OpenCV c++ opencv mat
  • 更新时间 :
  • 英文 :


当我设置一个宽度和高度较大的cv::Mat对象时,代码将运行异常...或打印"bgModel.size != tsize"。 当我降低宽度或高度时,打印"bgModel.size == tsize"。 似乎cv::Mat有大小限制。 有什么方法可以修改限制吗?

软件信息: Windows 10 OS, Visual Studio 2015, OpenCV 2.4.13.5 硬件信息。:i7-9700 CPU,64GB 内存。

C++代码如下:

int main()
{
int nWidth = 13529;
int nHeight = 10198;
unsigned long long int tSize = static_cast<long long int>(nWidth)*static_cast<long long int>(nHeight)*static_cast<long long int>(25);

try
{
cv::Mat bgModel;
bgModel.create(1, nHeight*nWidth*25, CV_32F);

if (bgModel.cols*bgModel.rows == tSize)
{
cout << "bgModel.size == tsize" << endl;
}
else
{
cout << "bgModel.size != tsize" << endl;
}
bgModel.release();
}
catch (...)
{
cout << "thrown exception...." << endl;
}
return 0;
}

我不确定为什么你需要这么大的cv::Mat,但它的大小至少是12GB!!因此,如果您的代码编译为 32 位二进制文件,则此代码将不起作用。我很确定您的异常来自内存限制。

最后:bgModel.colsbgModel.rowsint,如果你将它们相乘,它会溢出,你的计算将是不正确的。 所以你需要像你为tSize所做的那样铸造它.

另一个问题是create()方法的定义如下:

void cv::Mat::create(int rows, int cols, int type)  

如您所见intcols的数据类型范围无法处理3,449,218,550nHeight*nWidth*25int可以处理的最大2,147,483,647

相关内容

  • 没有找到相关文章

最新更新