Qt5.7 및 OpenNI를 사용하여 C++로 작성된 멀티 스레딩 응용 프로그램이 있습니다. 이것은 메인 녹음 파일 (asus xtion pro live)에서 프레임을 캡쳐하는 두 번째 스레드를 시작하는 메인 스레드를 가지고 있으며, Qt 신호 슬롯 메커니즘을 통해 프레임을 메인 스레드에 전달합니다.이 스레드는 imshow()
을 사용하여 디스플레이합니다. 내가 원하는 것은 일시 중지 키를 구현하는 것입니다. 예를 들어 'p'를 누르면 처리가 일시 중지됩니다. 나는이 같은 것을 생각하고 :멀티 스레딩 응용 프로그램에서 opencv waitKey() 사용
void Camera::run(){
while(!cameraStop && this->device.isValid())
{
try {
if (!buttonPause) {
getFrame();
process();
emit sigFrameImageReady(frame);
if (cv::waitKey(1)==112){
setButtonPause(!(getButtonPause()));
}
}
}
catch(std::exception &ex) {
std::cerr << "getFrame()" << ex.what() << std::endl;
}
}
}
를 작동하지 않습니다 이런 식으로, 여기, 프레임이 다른 스레드 (메인 하나)으로 표시됩니다 때문 년대 waitKey()
생각 단순히 블록 전체 프로세스, 내가 이런 식으로 단지 imshow()
후, 메인 쓰레드에 넣어하지만 만약 :
void Process::FrameImageReady(cv::Mat FrameImage)
{
if (modedebug)
cv::imshow("bgr", FrameImage);
if (cv::waitKey(1)==112){
cam->setButtonPause(!(getButtonPause()));
}
}
waitkey은 .. 어떤 생각 (이미지가 잘 작동 표시) 무시하는 것 같다?
편집 GUI 부분은 디버깅 용도로만 사용됩니다.
'imshow','waitKey'와'highgui'의 다른 기능들은 디버깅 목적으로 만 사용됩니다. 이미 Qt를 사용하고 있기 때문에 스레드로 올바르게 동작하는 이미지를 물결 모양으로 표시하는 것이 좋습니다. – Miki
이미지 표시가 올바르게 작동하며 유일한 문제는 waitkey()입니다. 동일한 기능을 가진 Qt 함수를 사용 하시겠습니까? 하나 추천 해 주시겠습니까? – rok
[KeyEvent] (http://doc.qt.io/qt-5/qkeyevent.html)를 확인하십시오.하지만 실제로는 제 것이 아닙니다 ... OpenCV 기능 이후 모든 GUI 항목에 대해 Qt를 사용하도록 제안하고 있습니다. 복잡한 작업에 사용하기위한 것이 아닙니다. – Miki