我有一个循环遍历一段视频,并对图像进行一些处理/计算。我想将图像保存在处理过程中具有最高值的循环中,但我在循环完成时临时存储图像时遇到了一些困难。
图像/帧是这样初始化的
IplImage* frame = 0;
IplImage* maxframe = 0;
循环时最大帧由
发现if( currentvalue > maxvalue ) {
maxvalue = currentvalue;
maxframe = frame;
}
我知道我在 maxframe 变量中存储的是指向帧指针中当前加载的帧的相同指针。当一个新的帧被加载到 frame 变量中时,它也将被 maxframe 指针指向。因此,当我保存 maxframe 指向的图像时,无论其计算值是多少,我都会保存循环中的最后一张图像。
我尝试了很多不同的解决方案,但我似乎无法解决这个问题。谁能帮我? :)
最佳答案
可能 IplImage* 帧被 OpenCv 内部引用系统回收。您是否尝试过使用 IplImage* cvCloneImage(const IplImage* image) 对图像进行深度复制? 顺便说一下,对于 openCv 2.0 及更高版本,最好使用 cvMat(或 cv::Mat)来保存图像...然后使用 cv::Mat 图像,然后使用 image.clone();
关于c++ - 在 OpenCV 中存储图像和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2763932/