ブーストで作成されたスレッドではなく、cvQueryFrame
(opencvでウェブカメラからフレームを取得する)に電話する必要があります。ここでは少しのコード例は次のとおりです。cvQueryFrameとboost :: threadを一緒に使用する
void testCVfunc(){
IplImage* frame;
CvCapture *capture;
capture = cvCreateCameraCapture(CV_CAP_ANY);
if(!capture){
exit(1);
}
frame = cvQueryFrame(capture);
cvNamedWindow("testCV", 1);
while(frame = cvQueryFrame(capture)){
if(!frame){
exit(2);
}
cvShowImage("testCV", frame);
cvWaitKey(1);
}
cvReleaseImage(&frame);
cvReleaseCapture(&capture);
}
int main(){
//Method 1: without boost::thread, works fine
testCVfunc();
//Method 2: with boost::thread, show black screen
char entree;
boost::thread threadTestCV = boost::thread(&testCVfunc);
std::cin >> entree;
}
コメントが言うように、私はboost::thread
からそれを呼び出すことはありませんが、私はboost::thread
を使用している場合、私は黒い画面を取得する場合testCVfunc
はその仕事をしていません。 私は問題を起こさない、多分誰かがしますか?
ありがとうございました。
cvNamedWindow()は問題ではなく、別のスレッドからOpenCVを実行しようとしているので、2番目の提案は本当に助けになりません(私の完全なプログラムは2番目のスレッドから実行される別のライブラリを使用します)。とにかく、ありがとう、別の考えですか? openCVがスレッドを担当しないのはなぜですか? – Crumble
どのようなシステムですか?勝つ? Linux?マック?どのようなopencvのバージョンを使用していますか? – karlphillip
申し訳ありませんが、そのような基本情報を言うのを忘れました。私はWindows 7で、opencv 2.3を使用しています。 – Crumble