- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我必须在内存中保存预定义数量的图像。我创建了一个像这样的数组:
int nb_frame_decalage=10;
IplImage** accumulateur_image;
CvCapture* capture;
IplImage* Image_B_Brut;
capture=cvCreateFileCapture("./Data/video2.avi");
if (!capture) {printf("\nOuverture du flux vidéo impossible !\n");key='k';}
image_B_brut = cvQueryFrame(capture);
accumulateur_image=malloc(sizeof(IplImage*)*nb_frame_decalage);
int i;
for (i=0;i<nb_frame_decalage;i++)
{
accumulateur_image[i]=cvCreateImage(cvGetSize(image_B_brut),
image_B_brut->depth,
image_B_brut->nChannels);
}
add_image(&accumulateur_image,image_B_brut,nb_frame_decalage);
之后我在 cvCapture 上循环,但在第一次调用该函数时出现错误:我想将元素添加到此列表的末尾...
void add_image(IplImage*** accumulateur,IplImage* Image_to_add,int taille_accumulateur)
{
int i;
for (i=0;i<taille_accumulateur;i++)
{
cvCopy((*accumulateur)[i+1],(*accumulateur)[i],NULL);
}
cvCopy(Image_to_add,*accumulateur[taille_accumulateur],NULL);
}
它可以编译,但似乎是add_image函数中的问题,因为当程序进入该函数时出现段错误。
有人已经犯过这个错误吗?
回答后编辑
最后,这段代码可以工作,我修改了索引add_image函数。
int nb_frame_decalage=10;
IplImage** accumulateur_image;
CvCapture* capture;
IplImage* Image_B_Brut;
capture=cvCreateFileCapture("./Data/video2.avi");
if (!capture) {printf("\nOuverture du flux vidéo impossible !\n");key='k';}
image_B_brut = cvQueryFrame(capture);
accumulateur_image=malloc(sizeof(IplImage*)*nb_frame_decalage);
int i;
for (i=0;i<nb_frame_decalage;i++)
{
accumulateur_image[i]=cvCreateImage(cvGetSize(image_B_brut),
image_B_brut->depth,
image_B_brut->nChannels);
}
add_image(&accumulateur_image,image_B_brut,nb_frame_decalage);
void add_image(IplImage*** accumulateur,IplImage* Image_to_add,int taille_accumulateur)
{
int i;
for (i=0;i<taille_accumulateur-1;i++)
{
cvCopy((*accumulateur)[i+1],(*accumulateur)[i],NULL);
}
cvCopy(Image_to_add,(*accumulateur)[taille_accumulateur-1],NULL);
}
感谢 alk 的有用回答。
最佳答案
假设你像这样调用add_image()
add_image(accumulateur_image, ..., nb_frame_decalage);
然后下面的行访问*accumulateur
越界:
cvCopy((*accumulateur)[i+1], ... /* for i=taille_accumulateur */
越界访问数组会引发未定义的行为,这在许多情况下会导致分段违规,也称为段错误。
<小时/>还有这个
cvCopy(Image_to_add,*accumulateur[taille_accumulateur],NULL);
应该
cvCopy(Image_to_add, (*accumulateur)[taille_accumulateur], NULL);
因为 []
运算符比 *
运算符绑定(bind)得更紧。但即使如图所示进行修复,在上述假设下,代码也可能会超出范围访问 *accumulateur
。
关于c - IplImage* 表 (IplImage**) 内的 cvCopy 出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21389437/
我在使用 OpenCV 的 cvCopy 函数时遇到内存泄漏问题。如果我评论那条线,那就没问题了。如果不是,内存会增加直到系统崩溃.. 我发现了这篇关于 OpenCV 内存泄漏的有趣文章:http:/
我在我的 opencv 项目中遇到一个问题,即 cvCopy 函数没有正常行为!所以我写了这段代码来测试它。 int n = 6; IplImage* img = cvCreateImage( cvS
我必须在内存中保存预定义数量的图像。我创建了一个像这样的数组: int nb_frame_decalage=10; IplImage** accumulateur_image; CvCapture*
我是一名优秀的程序员,十分优秀!