就目前而言,我正在尝试以 cv::Mats 的形式将整个图像列表保存在向量内以供以后处理。现在我有一些看起来像这样的东西:
do
{
image = readimage();
cv::Mat mat = cv::Mat((length, width, CV_8UC4, image));
cv::Mat temp = mat.clone();
saved_images.push_back();
mat.release();
temp.release();
freeimagememory(image);
}
while(hasimage);
这实际上有效。对于非常小的图像列表,它将很好地存储它们。然而,当我处理大量图像时,程序总是崩溃说 Abort() 被调用,并且经过检查它说它正在抛出一个 cv::exception。
有人知道为什么吗?我考虑过将向量更改为指向 cv::Mats 的指针向量以节省空间(克隆似乎很昂贵),但我不确定它的效果如何。
任何人都可以帮忙吗?
EDIT1:引发的确切错误是未能分配 X 字节。我认为这是因为它以某种方式耗尽了所有可用内存(即使我坐在 8 gigs 内存上并且肯定有可用内存)。
编辑2:
下面的代码似乎也有效。
std::vector<cv::Mat*> ptrvec;
do{
image.readimage();
ptrvec.push_back(new cv::Mat((length, width, CV_8UC4, image)));
freeimagememory(image);
}
while(hasimage);
这个没有内存问题(我可以将所有我想要的图像推送到它)但是当我尝试这样做时我遇到了访问冲突
cv::imshow("Test Window", *ptrvec[0]);
编辑3:
我有可能达到 32 位的上限吗?我完全有能力将它重新编译成一个 64 位项目。