본문 바로가기

Developer/OpenCV9

OpenCV - 라플라스 필터를 활용한 Edge 검출 및 Blur 영역 탐색 이번 포스팅에서는, 빗방울이나 blur 처리되어 흐릿하게 표현된 부분들의 비율을 계산하는 방법에 대해 포스팅해보겠습니다. 아래와 같이 특정 이미지들에서 일부가 오염되었을 경우, 오염된 부분들을 찾는 방법입니다. 흐릿하게 표현된, blur처리된 부분의 특징 blur 처리를 하기 위해 컨볼루트 필터를 쓰다보면, 값들의 평균 등을 이용해서 픽셀 간 차이를 낮추는 과정을 거치는데요. 반대로 생각해보면, 흐릿하게 표현된 부분을 찾을 때는 픽셀 간 차이가 낮은 구간을 탐색하면 됩니다. 픽셀 간 차이가 낮은 구간? 바로 생각나는 것은 Variance, 즉 분산입니다. 박스필터를 convolute 시키면서, 해당 구간의 픽셀 값 간의 분산을 구할 수 있다면, 커널 영역 별로 blur 처리된 부분을 탐색할 수 있다고 판.. 2021. 4. 2.
[OpenCV] Blur을 통한 이미지 노이즈 제거 (컨볼루션, 가우시안, 미디언) 이번 포스팅에서는 이미지를 흐릿하게 만드는 Blur 효과에 대해 알아보겠습니다. 본 포스팅은 이세우님의 '파이썬으로 만드는 openCV 프로젝트' 책을 참고했습니다. 아래와 같이 보통 blur 효과를 사용하면, 이미지가 흐릿해집니다. 좌측은 원본 이미지이고, 우측은 블러링 효과를 준 이미지입니다. 포토샵 등의 툴에서도 흔히 사용하는 기능이며, 주요 정보를 가리고 싶을 때 많이들 사용하는데요. blur가 들어가는 원리를 이해하면, 가리는 것(흐려지게 하는 것) 뿐만 아니라 노이즈 제거도 할 수 있다는 것을 알 수 있습니다. blur의 기본 원리 이미지 또는 영상을 흐릿하게 만드는 원리는, 다음과 같은 kernel를 전체 이미지에 convolution을 돌림으로써, 커널 사이즈에 맞게 픽셀 평.. 2020. 8. 16.
[OpenCV] 움직임을 인식하는 영상 (motion detecting) 이번 포스팅에서는 openCV를 이용해, 움직임을 인식하는 방법에 대해 알아보겠습니다. 본 글은 이세우님의 '파이썬으로 만드는 openCV 프로젝트' 책을 참고했습니다. 지난 포스팅에서 openCV 카메라가 한 프레임씩 찍어서 윈도우에 송출하는 방식이라고 말씀드렸는데요. 움직임을 인식하는 원리는 여기에서부터 출발합니다. 움직임 인식의 원리? 현재 불러온 프레임과, 이전 프레임 사이의 값을 비교합니다. 여기서 값이란 픽셀마다 가지고 있는 RGB, 또는 GRAY스케일의 값을 의미합니다. 즉, 픽셀마다의 차이값을 통해, 변했다면 움직임이 있는 것이고 변하지 않았다면 움직임이 없다고 판단하는 것입니다. 전체 윈도우 사이즈를 대상으로, 해당 차이값 어레이를 구하고, 어느 부분이 움직임이 생겼는지 구.. 2020. 8. 15.
[OpenCV] 카메라 영상 출력하기 최근 openCV를 이용해서 집안 관찰용 카메라를 만드는 프로젝트를 구상하고 있습니다. 오늘은 openCV를 이용해서 컴퓨터와 연결된 카메라를 띄우는 방법에 대해 알아보겠습니다. 시작하기 전에.. 아래 코드를 실행했을 때 다음과 같이 오류가 났습니다. (interrupted by signal 11: SIGSEGV) 여러 원인이 있는듯한데, 저 같은 경우 python console에서 3.7.3 버젼을 쓰고 있는게 문제였습니다. 3.7.5 로 업그레이드해주니 잘 실행되는점 미리 말씀드립니다. 코드는 다음과 같습니다. 123456789101112131415161718192021222324252627import cv2 cap = cv2.VideoCapture(0)# cap으로 영상을 불러옵니다. cap.set.. 2020. 8. 14.
[OpenCV] 비트와이즈 연산 (Bitwise) 비트와이즈 연산은 주로 마스킹을 할 때 유용합니다. 일부 원하는 부분만을 마스킹을 톻해 얻어낼 수 있는 방법입니다. OpenCV에서 제공하는 비트와이즈 연산 bitwise_and(img1, img2, mask=None): And 연산. bitwise_or(img1, img2, mask=None): Or 연산 bitwise_Xor(img1, img2, mask=None): Xor 연산 bitwise_Not(img1, img2, mask=None): Not 연산 아래 예제코드를 보시면 어떤 영역이 각각 마스킹 되는지 확인하기 좋습니다. 각 픽셀에 대해 두 이미지들 간 And/Or/Xor/Not 등에 의해 연산됩니다. 123456789101112131415161718192021222324import cv2im.. 2020. 4. 9.
[OpenCV] 알파블렌딩을 이용한 이미지 합성 영상처리에서 흔히 얘기하는 fade in/out 효과처럼 자연스럽게 2개의 이미지를 합성하는 방법을 알아보겠습니다. 0~255 사이의 숫자값으로 이루어진 이미지들! 이미지는 픽셀 기반의 숫자 배열 형태로 이루어져있습니다. 만약 2개의 이미지 합성을 위해 단순히 두 어레이를 더하는 형태로 표현하면 어떻게될까요? 이미지 데이터셋이므로 uint8, 즉 0~255 사이의 값만 갖도록 데이터타입을 선정했다고 가정했습니다. a+b: 단순히 이미지 2개를 더합니다. 255보다 큰 값이 나오면, uint8에 의해 255를 뺀 값이 저장됩니다. cv2.add(a, b): openCV에서 제공하는 add 메소드로, 255보다 크면 최대값인 255로 지정합니다. 이와 마찬가지로 더하기, 곱하기, 나누기도 동일한 방식으로 연.. 2020. 4. 8.