是它没关系这样做的,代码段当然是不完全的,只是为了说明我的意思:OpenCV和(不)返回IplImages,什么时候可以,什么时候没有?
void draw(IplImage* image){
cvLine(image,cvPoint(20,20),cvPoint(100,100),cvScalar(0,0,255),1);}
int main(){
cvNamedWindow("preview",CV_WINDOW_AUTOSIZE);
IplImage* image;
image=cvCreateImage(cvSize(480,360),8,3);
while(true){
draw(image);
cvShowImage("preview",image);
int ops=cvWaitKey(10)
if ops!=-1 break;}
cvReleaseImage(&image);cvDestroyWindow("preview");return 0;
}
还是会造成问题,如果我不返回IplImage结构是这样的:
IplImage* draw(IplImage* image){
cvLine(image,cvPoint(20,20),cvPoint(100,100),cvScalar(0,0,255),1);return image;}
好吧,我问的原因是,如果我不返回IplImage有时它的工作原理。然而,在其他情况下,我可能会收到某种空指针错误消息。例如,如果我释放函数中的图像,然后在此之后重新创建它,仍然处于该函数中,可能会发生崩溃。
()你是将指针'image'(指向IplImage结构...)的副本传递给函数void draw(IplImage * image){} ...在绘制函数内部,指向图像的指针的副本被去参照并用于修改图像(在你的案例中画一条线......)所以不需要返回...如果你还回来,那么也是一个警察y返回不是在main()中创建的原始图像指针... –
感谢您的评论rotate_image。我想我明白。如果我返回的图像,你说的副本增加工作内存,并可能导致内存溢出? I.o.w.会返回图像也没关系? – user1331044
将指针的副本传递给IplImage并不意味着你正在传递图像的副本...其指向图像的指针的副本...所以在32位机器上,指向图像的指针的大小为4个字节。 ..我不认为这会导致内存溢出,如果你在循环中使用它也..但如果你使用cvCreateImage或cvLoadImage没有cvReleaseImage循环内,那么它可以导致内存溢出... –