现在,我试图以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位内存上,而且绝对没有内存)。
EDIT2:
下面的代码似乎也有效。
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]);
EDIT3:
我有可能达到32位的上限吗?我完全有能力将它重新编译成一个64位的项目。
https://stackoverflow.com/questions/18189934
复制相似问题