7월, 2019의 게시물 표시

이미지 binary

이미지
영상 binary, 이진화 처리 입력되는 사진이 bgr 사진이면 gray로 바꿔주는 작업이 필요하다. cv2.cvtColor() 함수를 이용하여 작업을 진행하여 준다. 첫 번째 threshold()함수는 일반적인 이진화이다. 첫번째 인자는 입력할 이미지, 두번째는 기준점, 세번째는 기준점을 넘을 시 바꿀 값을 설정한다. 두 번째 adaptiveThreshold() 함수는 첫번째 함수 보다 원형의 이미지를 살리면서 이진화를 실행한다. 첫번째 인자는 똑같이 입력할 이미지, 두번째는 기준점 넘을 시 바꾸어줄 값, 세번째는 적응형 이진화 타입, 네번째는 이진화 타입, 다섯번째는 임계값 계산시 함께 볼 픽셀의 범위, 여섯번째는 평균 값에서 뺄 값이다. qt designer를 이용하였다. combo box를 이용하여 이진화 종류를 선택하게 하였으며, slider를 이용해 기준점을 설정 할 수 있게 하였다.

이미지 blur 처리

이미지
이미지를 blur 처리하는데 대략 4가지의 방법이 있다. 1. cv2.blur() : 평균 블러 처리 방법이다. 입력되는 이미지의 뒤에 있는 커널의 수가 커질수록 흐려짐이 강하다. 2. cv2.GaussianBlur() : 가우시안 블러는 평균 블러보다 edge를 남겨둔 채로 blur 처리를 하기에 노이즈 제거에 사용된다. 3. cv2.meianBlur() : 무작위 노이즈를 제거하는데 효과적이나 edge가 모호해질 수 있다. 4. cv2.bilateralFilter() : 가우시안과 비슷하게 edge를 남기고 blur 처리에 쓰인다. 위의 comboBox를 이용해 효과를 선택하며, 아래의 slider를 이용하여 적용될 커널의 수를 조절할 수 있게 하였다.

이미지에서 edge 검출

이미지
opencv와 python, qt를 사용하였다. cv2.cvtColor()를 이용해 입력된 이미지의 색상을 변경하여 주었다. cv2.COLOR_BGR2GRAY은 bgr에서 gray로 변경되는 옵션이며, 다양한 옵션이 존재한다. 이미지 입력은 사진 그리고 videoCapture() 함수를 이용한 비디오와 웹캠의 이미지도 가능하다. cv2.Sobel()을 이용하여 수직선 방향의 edge를 검출한다. ksize는 커널 갯수 이며 숫자가 클수록 선의 굵기가 굵어진다. designer를 이용하여 slider와 연동되게 하였다. cv2.convertScaleAbs()를 통해 sobelx의 값에 절대값을 적용하고 범위를 8bit unsigned int로 변경한다. 이후 widget에 출력을 하여 주면 edge가 검출된 이미지가 출력이 된다. https://docs.opencv.org/3.4.3/d5/d0f/tutorial_py_gradients.html  참고

PyQt FileDialog

이미지
FileDialog를 사용하기 위해 가장 위에 import하여 선언하여 준다. log = QFileDialog()를 선언하면서 사용할 준비를 한다. 경로만 가져오는 방법도 있으며, 이름만 가져오기도 하며, 하나 또는 그 이상의 이름을 가져 오는 방법도 가능하다. 현재는 파일 하나의 이름만 가져오면 되기에 getOpenFileName()함수를 사용하였다. (다른 함수에 대한 설명은  https://doc.qt.io/qt-5/qfiledialog.html#static-public-members  에서 볼 수 있다.) getOpenFileName에서 차례로 1. self는Parent 설정 2. 'Get Model'은 Dialog가 열렸을 시 창에 제목을 붙여주며 3. os.getcwd()는 시작될 경로(os.getcwd()를 사용하려면 os를 import 해 줘야한다, sys를 사용하는 방법도 있다.) 4. 가져올 파일들의 확장자를 정의 할 수 있다. "video (*.mp4);;All (*.*)" 와 같이 두게 이상의 목록을 만들고 싶은면 세미콜론(;) 2개를 이용하면 된다. (다이얼로그를 연 모습) (qt designer를 이용해 만든 경로를 표시할 LineEdit과 ToolButton)