opencv对获取的图像进行处理,可是处理的永远是上一帧图像

if(flag==1){frame=cvQueryFrame(capture);cvSaveImage("frame.jpg",frame);frame0=cvClone... if (flag == 1)
{
frame = cvQueryFrame(capture);
cvSaveImage("frame.jpg", frame);
frame0 = cvCloneImage(frame);
cvShowImage("video", frame0);

if (!frame0)
{
return ;
}
//下面是一段对frame0的数据处理
IplImage* tre = cvCreateImage(cvGetSize(frame0), 8, 1);
cvCvtColor(frame0, tre, CV_BGR2GRAY);

IplImage* erzhi = cvCreateImage(cvGetSize(frame0), 8, 1);
cvThreshold(tre, erzhi, 100, 255, CV_THRESH_BINARY);

..... .......
.........
后续还有一些算法处理。
}

现在的问题是 当flag==1时,捕捉的是flag不等于1时的图片,然后继续捕捉,显示和处理的都是上一次捕捉的一帧图片。不知道这是为什么?后面的数据处理是没问题的,主要是前面的获取图片的逻辑没弄明白,或者数据处理太复杂,处理不过来,有可能么??
在网上看了一些帖子后,一般都是cvQueryFrame返回的指针总是指向同一块内存。建议cvQueryFrame后拷贝一份。现在是把每次获取的frame先保存下来,再运算的,为什么还是处理的上一帧图片呢??求高手解答,在线等着!!谢谢!分数不多,希望大家帮帮忙
展开
 我来答
用户名不合法5
2015-05-13 · 超过57用户采纳过TA的回答
知道小有建树答主
回答量:97
采纳率:0%
帮助的人:77.7万
展开全部
应该是这样,每次循环都应该把图像从视频流里提出来,然后符合条件就保存处理。而你的是符合条件才提,而视频并没有跳帧,所以处理的图像就不对。
更多追问追答
追问
我是不想把图片的获取放在while循环里,只有触发条件flag==1成立时,才有frame = cvQueryFrame(capture);

当然capture的值也是放在while外面,难道就不能实现这样的捕捉吗?只能在while循环里不停地采视频数据,才能实时得到想要处理的图片吗?如果是这样的话,那我早就实现了。。。
追答
你虽然保存了图片,但是frame指向的内存没有变,还是cvQueryFrame的那块
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式