OpenCV 3.1 예제 - OpenCV를 pthread, mutex와 같이 사용하기OpenCV/OpenCV 강좌2016. 11. 25. 06:17
Table of Contents
반응형
pthread와 mutex를 OpenCV와 같이 사용하는 예제입니다.
main함수에서 웹캠을 열어주고 UpdateFrame 스레드를 생성하고 UpdateFrame 스레드 에서는 웹캠으로 부터 영상을 넘겨주길 기다렸다가 그레이 영상으로 변환 후 화면에 출력합니다. 이때 뮤택스를 사용하여 공유자원인 frame으로의 접근 문제를 해결합니다. ESC키를 입력하게 되면 스레드를 강제 종료시키고 프로그램을 종료합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | #include <stdio.h> #include <opencv2/opencv.hpp> #include <iostream> #include <pthread.h> using namespace cv; using namespace std; VideoCapture vcap; Mat frame; pthread_mutex_t frameLocker; pthread_t UpdThread; void *UpdateFrame(void *arg) { for(;;) { Mat tempFrame; vcap >> tempFrame; pthread_mutex_lock(&frameLocker); frame = tempFrame; pthread_mutex_unlock(&frameLocker); } pthread_exit( (void *)0 ); } int main(int, char**) { vcap.open(0); pthread_mutex_init(&frameLocker,NULL); pthread_create(&UpdThread, NULL, UpdateFrame, NULL); for(;;) { Mat currentFrame, grayImage; pthread_mutex_lock(&frameLocker); currentFrame = frame; pthread_mutex_unlock(&frameLocker); if(currentFrame.empty()) continue; cvtColor( currentFrame, grayImage, COLOR_BGR2GRAY); imshow("Input Image", currentFrame); imshow("Gray Image", grayImage); //ESC키를 누르면 쓰레드를 강제 종료후.. 프로그램 종료한다. if (waitKey(20) == 27 ) { int ret = pthread_cancel( UpdThread ); int status; if (ret == 0 ) { //자동 종료 ret = pthread_join( UpdThread, (void **)&status ); if ( ret == 0 ) //강제 종료시키면 status로 -1이 리턴된다. cout << "스레드 종료 성공" << status << endl; else cout << "스레드 종료 에러" << ret << endl; break; } } } return 0; } | cs |
컴파일을 한 후, 실행시켜 봅니다.
1 2 | webnautes@webnautes-notebook ~ $ g++ opencv_with_pthread.cpp -o test `pkg-config --cflags --libs opencv` -lpthread webnautes@webnautes-notebook ~ $ ./test | cs |
실행 결과입니다.
참고
http://www.joinc.co.kr/w/Site/Thread/Beginning/Example_pthread
http://stackoverflow.com/questions/27333498/opencv-with-pthreads-and-mutexes
반응형
'OpenCV > OpenCV 강좌' 카테고리의 다른 글
OpenCV에서 투명 이미지 오버레이 하기 (59) | 2017.11.23 |
---|---|
웹캠으로부터 입력된 영상을 일련번호 붙인 이미지 파일로 저장하는 예제 (52) | 2017.06.29 |
영상처리 강좌 3 - 컨볼루션(Convolution)과 스무딩(Smoothing), 샤프닝(Sharpening) (2) | 2016.09.24 |
영상처리 강좌 2 - 히스토그램 평활화( Histogram Equalization ) (5) | 2016.09.23 |
Hough Line Transform 구현 (15) | 2016.09.21 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
@webnautes :: 멈춤보단 천천히라도
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!