라벨이 이미지 처리인 게시물 표시

[MFC] 멀티쓰레드에서 사용하기 좋은 QUEUE (concurrent_queue)

 라인 스캔 카메라를 고속으로 사용할 일이 있어 스캔 속도를 높였더니   이미지가 뒤죽박죽이 되는 현상이 발생하였다.   아무래도 이미지를 합치기 위해 한 줄씩 카피하다보니 메모리에서 이미지 카피 속도 보다   카메라에서 던지는 속도가 더 빠른듯 하다.   일단 카메라에서 받는 이미지를 concurrent_queue 에 넣고    다른 쓰레드에서 이를 빼서 처리하는 방식으로 코드를 수정하였다.   concurrent_queue 는 멀티 쓰레드에서 사용하기 편한 Queue 로    Push 나 try_pop 을 할 때 다른 쓰레드에서의 접근을 신경쓰지 않아도 된다. CCriticalSection 을 Lock, Unlock 하지 않아도 된다는 말씀! 검색해본 결과 empty, push, get_allocator, try_pop 함수만 쓰레드 세이프 하고   다른 함수들은 접근하고 있는 쓰레드의 유무에 따라 값이 바뀔수도 있다고 한다. 사용법은 concurrent_queue<template> _QUEUE; 로 선언 후 _QUEUE.push( 객체 ); 로 push _QUEUE.try_pop(&객체) 로 Pop 하여 사용하면 된다.   #include < concurrent_queue . h > concurrent_queue<int> _QUEUE;   _QUEUE.push(1);  int a = 0; _QUEUE.try_pop(&a); --- 추가 --- 생각대로는 잘 안된다. push는 모르겠는네 try_pop 과 empty 가 동시에 두 개 이상 쓰레드에서 진행될 때  문제가 발생했다. empty로 동시에 접근하고 try_pop 할 때 문제가 발생한다;;;   어쩔 수 없이 Lock과 Unlock 을 사용하여 문제를 해결하여 사용중이다.   조금 더 공부가 필요할 것 같다. [출처] : http://egloos.zum.com/sweeper/v/3053916 [출처] : https://docs.microsoft

[Python] 파이썬에서 Opencv를 이용해 웹캠 영상 읽어오기 및 저장

이미지
자 이번엔 노트북에 달린 카메라를 이용해 영상을 받아 출력해보자 우선 코드를 보자 import cv2 cap = cv2.VideoCapture( 0 ) print ( 'width :%d, height : %d' % (cap.get( 3 ) , cap.get( 4 ))) while ( True ): ret , frame = cap.read() # Read 결과와 frame if (ret) : gray = cv2.cvtColor(frame , cv2.COLOR_BGR2GRAY) # 입력 받은 화면 Gray로 변환 cv2.imshow( 'frame_color' , frame) # 컬러 화면 출력 cv2.imshow( 'frame_gray' , gray) # Gray 화면 출력 if cv2.waitKey( 1 ) == ord ( 'q' ): break cap.release() cv2.destroyAllWindows() opencv를 import 해준 뒤 VideoCapture() 함수를 이용해 웹 캠을 연결 한다. 전달 인자는 디바이스 아이디를 넘겨주는데 0을 넣어주면 보통 웹캠이나 카메라에 연결 된다. print 문으로 기본 웹캠의 width 와 height를 출력해보도록 하자 프로그램을 종료하려면 q 버튼을 눌러주면 종료! 아래는 코드 실행 결과 [컬러 출력 결과] [Gray 출력 결과] [출력된 카메라 해상도] 영상 저장은 cv2.VideoWriter_fourcc() 를 이용하면 가능하다 매개변수로 코덱을 넘겨주는데 'D','I','V','X' 와 같이 넘겨주거나 아래와 같이 *'DIVX' 로 넘겨주면 됨 import cv2

[Python] 파이썬 OpenCV 설치

이미지
한국에 온 후 사용하던 매트랩을 사용을 못하니 대신할 녀석으로 파이썬을 선택했다 우선 개발 속도가 빠른데다가 문법도 비슷하고 무엇보다 머신 러닝에 강력한 성능을 보여주니 앞으로 테스트 할 일이 있으면 파이썬을 이용해 진행하고자 한다 우선은 파이썬 용 OpenCV를 설치하도록 하자 일단 난 파이참을 이용하니까 파이참에서 설치 법은 다음과 같다. 파이참 메뉴 File -> Setting을 누르면 위와 같은 창이 나타난다. 왼쪽 메뉴에서 Project Interpreter 를 선택하면 오른쪽에 현재 설치 된 항목들이 나타난다. 제일 오른쪽 + 버튼을 누르면 설치할 수 있는 인터프리터들이 나오는 창이 뜬다. 검색창에 openCV를 검색하면 위와 같은 결과들이 나타나는데 그림과 이 opencv-python 을 선택하여 Install Package 버튼을 누르자! 설치가 완료 되면 다음 코드를 입력하고 그림 파일을 코드와 같은 디렉토리에 넣고 간단히 실행 테스트를 해보자 import cv2 fname = '1.jpg' img = cv2.imread(fname, cv2.IMREAD_COLOR) cv2.imshow('image',img) cv2.waitKey(0) cv2.destroyAllWindows() 아래와 같이 이미지가 뜨면 테스트 완료!!