简体   繁体   中英

Problem accessing camera when using Boost thread on OSX

I'm trying to use OpenCV to open a camera. This works fine when I open the camera in the main thread, but when I try to open the camera while in a Boost thread, it fails. I haven't been able to google why this happens. I assume it's somehow related to the permissions of the Boost thread.

The following works fine:

#include <cv.h>
#include <boost/thread.hpp>
#include <highgui.h>

using namespace cv;
void openCamera() {
    Ptr< VideoCapture > capPtr(new VideoCapture(0)); // open the default camera
}

int main() {
    openCamera();
}

And my camera turns on briefly after which I get the message "Cleaned up camera" as one would expect.

But when I try the same through a Boost thread, it doesn't open the camera:

#include <cv.h>
#include <boost/thread.hpp>
#include <highgui.h>
#include <iostream>

using namespace cv;
void openCamera() {
    std::cout << "confirming that openCamera() was called" << std::endl;
    Ptr< VideoCapture > capPtr(new VideoCapture(0)); // open the default camera
}

int main() {
    boost::thread trackerThread( boost::bind(openCamera) );
}

This prints "confirming that openCamera() was called", but the camera never turns on and there is no "Cleaned up camera" message.

Is there any way I can fix it?

Thanks!

I don't use boost a lot, but don't you need to do something to keep main() from exiting while your thread works? Like maybe...

int main() {
    boost::thread trackerThread( boost::bind(openCamera) );
    trackerThread.join();
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM