可以做这样的事情吗,代码片段当然不完整,只是为了说明我的意思:
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,有时它会起作用。但是,在其他情况下,我也可能会收到某种 NULL 指针错误消息。例如,如果我在函数中释放图像,然后立即重新创建它,仍然在该函数中,则可能会发生崩溃。
您不需要返回任何内容,但您绝对需要检查失败!
问题是你没有安全地编码。调用 OpenCV 函数时,您永远不会检查失败,这可能会导致draw()
接收NULL
指针作为参数,并且可能会导致崩溃或其他一些奇怪的行为。
你应该做的第一件事是开始防御性编码:
IplImage* image = cvCreateImage(cvSize(480,360),8,3);
if (!image)
{
// print error and quit
}
在函数中添加安全检查也没有什么坏处:
void draw(IplImage* image)
{
if (!image)
{
// print error
return;
}
cvLine(image,cvPoint(20,20),cvPoint(100,100),cvScalar(0,0,255),1);
}