图片-opencv初学者 为什么调用摄像头 怎么出现捕获源什么框框的。。。

问题描述

opencv初学者 为什么调用摄像头 怎么出现捕获源什么框框的。。。


用的opencv 4.8 和vs 2010

这是调用的那个cpp代码
/*打开摄像头,通过摄像头进行实时人数统计*/

#include "peoplecounting.h"

#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
#include "cvaux.h"
#include "cxcore.h"

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;

void peoplecounting::SelectTheCamera()
{
//初始化内存及分类器
static CvMemStorage* storage = 0;
static CvHaarClassifierCascade* cascade = 0;

//加载分类器,名称为"xml.xml"
const char* cascade_name="C:/Users/kjyszylkj/Desktop/460518377Count/Count/Count/xml.xml";
cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );

if( !cascade )
{
    QMessageBox::information(
        0,
        "错误",
        "不能加载分类器",
        QMessageBox::Ok);
}

//定义某一帧的图片、灰度图及haar图
IplImage* pFrame = NULL;
IplImage* pHaarImg = NULL;
IplImage* pGrayImg = NULL;  

int nFrmNum = 0;

cvNamedWindow("camera",1);

cvMoveWindow("camera",30,0);

//打开自带摄像头
CvCapture* pCapture = cvCreateCameraCapture(-1);

if(!(pCapture))
{
    QMessageBox::information(
        0,
        "错误",
        "不能打开摄像头",
        QMessageBox::Ok);
}
else
{
    while(pFrame = cvQueryFrame(pCapture))                      //如果能够捕获到视频
    {
        nFrmNum++;

        //如果这是第一帧视频,需要申请内存并初始化
        if(nFrmNum == 1)
        {
            pGrayImg = cvCreateImage(cvSize(pFrame->width,pFrame->height),8,1);
            pHaarImg = cvCreateImage(cvSize(cvRound(pFrame->width/1.1),cvRound(pFrame->height/1.1)),8,1);

            //转化为灰度图像再处理
            cvCvtColor(pFrame, pGrayImg,CV_BGR2GRAY);

            //缩放灰度图像
            cvResize(pGrayImg,pHaarImg,CV_INTER_LINEAR);

        }
        else
        {
            cvGrabFrame(pCapture);                                  //抓取一帧

            pFrame = cvRetrieveFrame(pCapture);                     //将图像从缓存中转换为IplImage存在pFrame中

            //转化为灰度图像
            cvCvtColor(pFrame,pGrayImg,CV_BGR2GRAY);

            //缩放灰度图像
            cvResize(pGrayImg, pHaarImg,CV_INTER_LINEAR);

            //直方图均衡化
            cvEqualizeHist(pHaarImg,pHaarImg);

            //分配内存空间
            storage = cvCreateMemStorage(0);

            //人数统计
            if(cascade)
            {
                //检测窗口每次放大1.1倍
                double scale = 1.1;
                int i;

                //使用分类器进行人脸检测
                CvSeq* PeopleCounting = cvHaarDetectObjects( pHaarImg, cascade, storage,
                                            scale, 2, 0/*"CV_HAAR_DO_CANNY_PRUNING"*/,
                                            cvSize(30,30) );

                //在检测到的人脸上画出红色圆圈标记
                for(i=0;i<(PeopleCounting?PeopleCounting->total:0);i++)
                {
                    CvRect* r = (CvRect*)cvGetSeqElem(PeopleCounting,i);                    //返回矩形的信息
                    CvPoint center;
                    int radius;
                    center.x = cvRound((r->x + r->width*0.5)*scale);                        //圆心横坐标
                    center.y = cvRound((r->y + r->height*0.5)*scale);                       //圆心纵坐标
                    radius = cvRound((r->width + r->height)*0.25*scale);                    //半径
                    cvCircle(pFrame, center, radius, CV_RGB(255,0,0), 3, 8, 0 );            //(图像,圆心,半径,颜色,粗细,线条类型,小数点位数)
                }

                //将人数的个数显示到主窗口
                int number;
                number = PeopleCounting->total;
                QString tmp;
                tmp = QString("副窗口画面中一共有%1个人").arg(number);           //文字信息
                ui->textEdit->setText(QString(tmp));                            //设置文字信息
                ui->textEdit->setAlignment( Qt::AlignCenter );                  //设置文字居中

            }

            //显示每一帧的图像
            cvShowImage("camera",pFrame);

            char key = cvWaitKey(1000);

        }
    }

    //释放图像
    cvReleaseImage(&pFrame);
    cvReleaseImage(&pHaarImg);
    cvReleaseImage(&pGrayImg);

    cvWaitKey(0);

    //销毁窗口
    cvDestroyWindow("camera");

    //释放摄像头
    cvReleaseCapture(&pCapture);
}

}

各位大侠求救!!!

解决方案

http://blog.csdn.net/augusdi/article/details/8762961

解决方案二:

使用OpenCV在开启摄像头前,是有方法可以获得当前计算机中可用摄像头的,每个摄像头都有一个编号和一个对应的名字,而在连接的时候,是通过编号来打开对应的摄像头的,默认是第0个

时间: 2024-10-31 21:32:44

图片-opencv初学者 为什么调用摄像头 怎么出现捕获源什么框框的。。。的相关文章

弱弱地问一下:opencv都可以调用普通的免驱笔记本外接摄像头吗?

问题描述 弱弱地问一下:opencv都可以调用普通的免驱笔记本外接摄像头吗? 如题~直接cvCaptureFromCAM....巴拉巴拉就可以直接调用了吗(想买个笔记本外接摄像头) 解决方案 看看这个能不能用到,http://blog.sina.com.cn/s/blog_4a189c920101cm8v.html

android相机拍照后上传到指定文件夹,opencv是通过调用文件夹里图片进行处理的吗?

问题描述 android相机拍照后上传到指定文件夹,opencv是通过调用文件夹里图片进行处理的吗? 现在有一个Android拍照上传到指定文件夹的程序和一个opencv图像匹配的程序,能否通过修改某些语句和配置环境可以将两者结合?如果可以求大神赐教!(opencv是在文件夹选取图片进行匹配的.) 解决方案 可以直接调用文件夹里的图片处理,配置的话把路径配置成相对路径就可以了

Android开发教程之调用摄像头功能的方法详解_Android

本文实例讲述了Android调用摄像头功能的方法.分享给大家供大家参考,具体如下: 我们要调用摄像头的拍照功能,显然 第一步必须加入调用摄像头硬件的权限,拍完照后我们要将图片保存在SD卡中,必须加入SD卡读写权限,所以第一步,我们应该在Android清单文件中加入以下代码 摄像头权限: <uses-permission android:name="android.permission.CAMERA"/> SD卡读写权限: <uses-permission androi

Android开发教程之调用摄像头功能的方法详解

本文实例讲述了Android调用摄像头功能的方法.分享给大家供大家参考,具体如下: 我们要调用摄像头的拍照功能,显然 第一步必须加入调用摄像头硬件的权限,拍完照后我们要将图片保存在SD卡中,必须加入SD卡读写权限,所以第一步,我们应该在Android清单文件中加入以下代码 摄像头权限: <uses-permission android:name="android.permission.CAMERA"/> SD卡读写权限: <uses-permission androi

java 下拉多级联动 头像裁剪 调用摄像头 SpringMVC mybatis SSM

获取[下载地址]   QQ: 313596790A 调用摄像头拍照,自定义裁剪编辑头像 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单;  技术:313596790 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块C 集成阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩

C#调用摄像头

问题描述 本人弄了个程序(开发环境VS2010,语言C#,winForm),在win7中运行可以调用摄像头并抓捕图片.可以把程序安装在win8上,就不能调用摄像头了.在picturebox容器里显示一片黑,抓捕到的图片都是空的.观察发现,win8上调用摄像头,摄像头的指示灯都没亮.求大神解决-- 解决方案 解决方案二:驱动程序是否有问题.系统内置的照相机app可以访问摄像头么?解决方案三:系统可以用摄像头拍照.解决方案四:求大神帮忙--急啊!解决方案五:"弄了"个程序....我分析了下

Android应用调用摄像头开发例子

这两天玩Android玩的废寝忘食,Blog都好几天没加东西了,惭愧!记录一下这两天最崩溃的一个问题. 好早就装了开发环境,真正着手还是这两天,非常的生疏,虽然有SDK文档,那么多蚊子一般的字,实在没心思慢慢研究.这不想调用摄像头,原以为很容易就能搞定的,累计花了大概有一天的时间才只能保证不出错--至于效果嘛,难说啊! 先看API-examples里有调用 摄像头的例子,在模拟器上虽然看不出什么效果,毕竟还是能执行的,就是一个方块在黑白相间的背景上移动呗. 就这么一个Google提供的范例,传到

javacv-JavaCV调用摄像头如何调节分辨率?高分 求高手

问题描述 JavaCV调用摄像头如何调节分辨率?高分 求高手 求高手! 想用JavaCV获取摄像头图像并拍照,买的高分辨率的摄像头,可是拍出来的照片才55kb,远不及直接连电脑拍出来的效果,请教如何在java程序中调节分辨率http://blog.csdn.net/sivyer123/article/details/22411861 这是示例程序 public class video { public static void main(String[] args) throws Exceptio

html5调用摄像头实现拍照

技术时刻都在前进着.我们的需求也是时刻在改变着.最近在开发中遇到了用户进行账号注册时需要个人图像,网站提供自动拍照功能.还有在登录了PC之后,手机端进行登录时只需要扫描一下PC上的二维码就可以登录.这对一个网络来说难度是极大的. 技术的进步使我们遇到了html5.下面这个简单粗暴的demo就是来完成这些功能的.直接看代码: <!DOCTYPE html> <html> <head> <title>html5调用摄像头实现拍照</title> &l