o(╯□╰)o。OPENCV和MFC一起混用。。

解决方案 »

  1.   

    是不是系统的问题,我用的是win7+vc6.0+mfc+opencv,我用《学习OpenCV中文版》中的例程实验也是可以调用摄像头但还是黑屏,郁闷!!求救ING!!!
      

  2.   

    2.2么?opencv2.2有bug,把源码make出来修改后从新编译就ok。
      

  3.   

    摄像头无图像这是2.2版本的一个已知Bug,已经被修改到其对应分支上,但是官网上发布的文件包并没有包含这个修改。
    因此只要手动修改这个bug对应的代码,问题便可解决。需要修改的文件位置:  $(OpenCV Folder)\modules\highgui\src\precomp.hpp
    找到如下代码:
    #if !defined WIN32 && !defined _WIN32
    #include "cvconfig.h"
    #else
    void  FillBitmapInfo( BITMAPINFO* bmi, int width, int height, int bpp, int origin );
    #endif
    将其修改为:
    #include "cvconfig.h" 
    #if defined WIN32 || defined _WIN32 
    void  FillBitmapInfo( BITMAPINFO* bmi, int width, int height, int bpp, int origin ); 
    #endif 
    重新编译OpenCV代码后即可正常打开摄像头。
      

  4.   

    在OnTimer里面,img.CopyOf(frame,10) 这一行,第二个参数不对吧,
    这个应该是对应的通道数,改成frame->nChannels试试还有,ReleaseDC( pDC ),这个需要释放吗,不用吧,不许要每次都是放吧,注释掉试试
      

  5.   

    感谢大家的帮助,已经解决了,用的是opencv+directshow解决的,具体的程序我已经上传了,同样问题的朋友可以看看。9楼的方法我再试试,再次感谢大家的帮忙!
      

  6.   

    我调了一晚上,终于发现是少了消息,要在类源文件中的消息映射部分加上:ON_WM_TIMER()
    然后把ReleaseDC( pDC )删掉。。就行了
      

  7.   

    我也遇到了楼主的问题~~但是只限于MFC中~~如果在控制台程序中条用摄像头是没有问题的~
    void CdemoDlg::display( UINT ID , IplImage* image)//图像显示函数
    {  
    //以下代码实现图像在特定空间中的显示
    CDC *pDC = GetDlgItem(ID)->GetDC(); // 获得Picture控件的 DC   
    CRect rect;
    GetDlgItem(ID)->GetClientRect(&rect);//获得Picture控件矩形框
    CvvImage img;
    img.CopyOf( image,-1 );
    img.DrawToHDC(pDC->GetSafeHdc(), &rect );
       //ReleaseDC( pDC );
    // cvReleaseImage( &image ); 
    }
    void CdemoDlg::OnTimer(UINT_PTR nIDEvent)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
      if(1==nIDEvent)
          {
              IplImage* img=0;  
              img=cvQueryFrame(capture); //从摄像头或者文件中抓取并返回一帧
      display(IDC_STATIC,img);
     // cvSaveImage("1.jpg",img);
           }
    CDialogEx::OnTimer(nIDEvent);
    }
    void CdemoDlg::OnBnClickedOk()//摄像头调用并显示
    {
    // TODO: 在此添加控件通知处理程序代码

    capture = cvCaptureFromCAM( -1);
    //capture = cvCreateFileCapture( "F:\\1.avi" );  //初始化一个视频文件捕捉器
    if( !capture )
       {
            CString str("can't open the camera or video!");
            MessageBox(str);
       
        } SetTimer(1,40,NULL); //定时器,定时时间和帧率一致}
    有没有大神帮我瞧瞧啊~~cvCreateFileCapture也无法打开.avi视频