代码很简单,就是引入一张图片然后裁剪,得到ROI区域。我主要用来测试相关函数是否可以在C文件下使用。
#include<cv.h>
#include<cxcore.h>
#include<highgui.h>
#include <stdio.h>
#include <stdlib.h>
void main()
{
IplImage *res, *dst;
CvRect rect;
rect.x = 10, rect.y = 10, rect.width = 100, rect.height = 100;
res = cvLoadImage("E:/search/week5-yolov2/darknet-master(1)/darknet-master/yolo-face-master/000001.jpg");//载入一张图片
dst = cvCreateImage(cvSize(100, 100), 8, 3);//创建图像空间
//创建窗口
cvNamedWindow("res", CV_WINDOW_AUTOSIZE);
cvNamedWindow("dst", CV_WINDOW_AUTOSIZE);
//设置ROI区域
cvSetImageROI(res, rect);
printf("OK");
//提取ROI
cvCopy(res, dst,NULL);
//取消设置
cvResetImageROI(res);
//显示图像
cvShowImage("res", res);
cvShowImage("dst", dst);
cvWaitKey(0);
cvDestroyWindow("res");
cvDestroyWindow("dst");
cvReleaseImage(&res);
cvReleaseImage(&dst);
}
问题是,如果我用C语言编译,可以通过,但是运行时刻会崩溃,但是我想不通哪里会出现内存泄漏或者其他方面的问题?
使用C++编译器编译,通过且运行成功。
烦请各位赐教,多谢。
补充:
经过各位提醒,调试后的报错信息如下:
可能是其他的问题吧,也许是运行问题
把cvReleaseImage放在cvDestroyWindow前面试试,应该是顺序上的问题
调试具体报错是啥错呢?是不是调用顺序相关的问题?
cvWaitKey(0);之前能否正常运行,一部分一部分的排查,有可能是release和destroy顺序
IplImage 类的两个对象都是用的堆缓冲,使用C++,在作用域结束的时候,自动调用析构函数释放内存了。而使用C编译器可没这特性。
是不是因为你创建IplImage 两个变量的时候没有给它指为NULL?或许存在这种问题
想问 楼主的 opencv 是哪个版本啊
我是 3.2 用.c编译都会报错