1

我遇到了让标准开放式 CV 人脸检测 ( facedetect) 工作的问题。网络摄像头灯亮了,但注意到发生了,程序启动时有一个像这样的小窗口:

在此处输入图像描述

我正在编写一篇出色的博客文章示例代码。这是我所做的:

  1. 安装 OpenCV 并获取 OpenCV 源

    brew tap homebrew/science
    brew install --with-tbb opencv
    wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.6/opencv-2.4.6.tar.gz
    tar xvzf opencv-2.4.6.tar.gz
    
  2. 使用标准分类器运行facedetect样本。

    cd ~/opencv-2.4.6/samples/c
    chmod +x build_all.sh
    ./build_all.sh
    ./facedetect --cascade="../../data/haarcascades/haarcascade_frontalface_alt.xml"
    

我可以修改 C++ 示例代码并重新编译并运行,但我不知道问题是什么。

有人有建议吗?

更新问题是来自的图像cvQueryFrame是空的:

IplImage* iplImg = cvQueryFrame( capture );
frame = iplImg;
if( frame.empty() ) 
{
    cout << "FRAME EMPTY\n";  // This is getting logged
    break;
}

更新:当源是静态图像时它可以正常工作,因此问题与网络摄像头源有关。

莉娜

4

2 回答 2

5

您可以尝试定位问题,您是否尝试从网络摄像头捕获图像并显示它,而不运行任何其他操作?

似乎通过 OpenCV 从网络摄像头捕获图像存在问题,这种问题可能是由于硬件而发生的,例如在我的朋友 macbook pro 上捕获的图像是 320x240,而我的图像是 640x480。我的朋友只是从相机的设置中更改了一个简单的配置,他的问题就解决了。你的问题可能是这样的。

或者您可以尝试仅使用一些图像运行人脸检测器,您需要更改代码以便它从您的磁盘加载图像并尝试检测它们上的人脸。如果它不起作用,我们可以说您的问题不是相机,存在更大的问题,或者如果它起作用,我们可以肯定地说问题是网络摄像头。

编辑

如果您使用 IplImage 类型,请确保从相机中获取更多图像,有时第一张图像是空的。

于 2013-10-12T18:20:57.247 回答
2

这是由于 OpenCV 中的一个错误 - 它已被修复(此处的错误报告http://code.opencv.org/issues/3156),但 homebrew/science 中的版本来自修复之前。

您可以通过编辑 opencv 的 brew 公式来安装更新版本(基于此拉取请求https://github.com/Homebrew/homebrew-science/pull/540

编辑 /usr/local/Library/Formula/opencv.rb ,并替换这些行:

url 'http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.6.1/opencv-2.4.6.1.tar.gz'
sha1 'e015bd67218844b38daf3cea8aab505b592a66c0'

与这些

url 'https://github.com/Itseez/opencv/archive/2.4.7.1.tar.gz'
sha1 'b6b0dd72356822a482ca3a27a7a88145aca6f34c'

然后做

brew remove opencv 
brew install opencv

适用于小牛队(至少对我而言),应该适用于山狮

更新: homebrew/science 中的 OpenCV 版本现已更新,所以这个答案现在已经过时了!

brew upgrade opencv

将使自制软件获得最新版本,并带有固定的网络摄像头捕获。

于 2013-12-16T15:57:29.213 回答