Multithreading 使用Boost线程显示窗口时出错&;OpenCV OSX
因此,我知道以下链接: 但我的问题是,在boost线程中使用openCV时,我无法显示窗口。即:Multithreading 使用Boost线程显示窗口时出错&;OpenCV OSX,multithreading,macos,boost,opencv,homebrew,Multithreading,Macos,Boost,Opencv,Homebrew,因此,我知道以下链接: 但我的问题是,在boost线程中使用openCV时,我无法显示窗口。即: int main(int argc, char* argv[]) { CvCapture* cvInputObj = cvCaptureFromCAM((CV_CAP_ANY)); //OSX assert( cvInputObj != NULL ); //term on fail here cVision vision(cvInputObj); //Define cVisi
int main(int argc, char* argv[]) {
CvCapture* cvInputObj = cvCaptureFromCAM((CV_CAP_ANY)); //OSX
assert( cvInputObj != NULL ); //term on fail here
cVision vision(cvInputObj); //Define cVision thread obj
boost::thread cVision_thd(boost::bind(&cVision::Run, &vision));
cVision_thd.join();
std::cout<<"System Going Down..."<<std::endl;
}
etcetc,其中imCur提取如下:
imCur = cvQueryFrame(input);
这段代码在Linux中非常有效。我最初用一个定制的makefile尝试过这个。那是行不通的。在这之后,我试着用CMAKE。还是一样的结果。而且在linux中仍然可以正常工作。我使用自制软件安装了openCV 在
main
线程中创建窗口,然后将窗口名称作为参数传递给cVision
构造函数
请记住,创建窗口时使用:
cvNamedWindow(“监视器”,CV\u window\u AUTOSIZE)代码>谢谢,我试过了。我只需要名称的字符串值,对吗?所以基本上我在做一个简单的cvShowImage(“监视器”,imCur)。我看到第一帧或两帧更新,但随后什么都没有。拍摄的第一幅图像似乎是一个更高的分辨率(通过更大的窗口大小可以观察到),然后将其裁剪到640x480。问题是我在CVshowImages之前通过cvSetCaptureProperty设置了图像大小实际上发生了以下情况:Main创建CvCapture对象和窗口,并将其传递给cVision线程。该线程具有以下内容&我看到“Test”被重复打印,但是输入图像不会更新:cvShowImage(“ISIS_MONITOR”,imCur);标准::cout
imCur = cvQueryFrame(input);