【发布时间】:2023-04-05 21:02:02
【问题描述】:
当我设置一个宽高大的 cv::Mat 对象时,代码会运行异常...或打印“bgModel.size != tsize”。 当我降低宽度或高度时,打印“bgModel.size == tsize”。 似乎 cv::Mat 有大小限制。 有什么方法可以修改限制吗?
软件信息。 :Windows 10 操作系统、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 构造函数和像
create这样的函数将int作为宽度/高度的类型。所以你会受到 API 的限制。 -
@PeterT 我真的不称它为 API 限制。 Mat 的每个维度都是 2147483647 .....我认为更多的情况是尝试在没有优化的情况下实现一个想法。
-
你可能认为这个限制是合理的,我在 2000 年也会这么认为。这并不能改变它是一个限制的事实。
-
@PeterT 但我们应该考虑将 opencv 用于图像处理,这个限制几乎涵盖了任何类型的普通图像。