一种导致cvDestroyWindow产生内存泄露的用法


cvNamedWindow和cvDestroyWindow必须在同一个线程下使用,否则销毁窗体时会产生内存泄露,窗体并不会被真正释放,虽然此时窗体已经不见了。当你再次创建同名窗体时你会发现并没有窗体显示出来,而且在使用vc调试时,关闭程序时会产生内存泄露警告。就这么简单,that's all!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是用基于C的OpenCV编写的人脸识别代码: ```c #include <stdio.h> #include <opencv/highgui.h> #include <opencv/cv.h> int main() { // 打开摄像头 CvCapture *capture = cvCreateCameraCapture(0); // 创建窗口 cvNamedWindow("Face Recognition", CV_WINDOW_AUTOSIZE); // 加载人脸检测器分类器 CvHaarClassifierCascade *cascade = (CvHaarClassifierCascade*)cvLoad("haarcascade_frontalface_alt.xml"); // 循环处理每一帧 while (1) { // 从摄像头中读取一帧 IplImage *frame = cvQueryFrame(capture); // 计算图片大小 CvSize size = cvGetSize(frame); // 转化成灰度图 IplImage *gray = cvCreateImage(size, IPL_DEPTH_8U, 1); cvCvtColor(frame, gray, CV_RGB2GRAY); // 检测人脸 CvSeq *faces = cvHaarDetectObjects(gray, cascade, cvCreateMemStorage(), 1.1, 3, CV_HAAR_DO_CANNY_PRUNING, cvSize(30, 30)); // 遍历所有人脸,并画出矩形框 for (int i = 0; i < faces->total; i++) { CvRect *rect = (CvRect*)cvGetSeqElem(faces, i); cvRectangle(frame, cvPoint(rect->x, rect->y), cvPoint(rect->x + rect->width, rect->y + rect->height), CV_RGB(255,0,0), 3, 4, 0); } // 显示图片 cvShowImage("Face Recognition", frame); // 释放资源 cvReleaseImage(&gray); // 等待按下ESC键来退出 char c = cvWaitKey(10); if (c == 27) { break; } } // 释放资源 cvReleaseCapture(&capture); cvReleaseHaarClassifierCascade(&cascade); // 销毁窗口 cvDestroyWindow("Face Recognition"); return 0; } ``` 这个程序使用了OpenCV提供的人脸检测器分类器,从摄像头读取每一帧图像,并使用分类器识别人脸并在图像上画框。请注意,这个程序仅仅是一个演示,没有考虑到人脸实时跟踪的问题,如果要实现更高级的人脸识别应用,还需要进一步的优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值