반응형

OpenCV 6

openCV 활용한 문서 스캐너 프로그램 만들기(2)

(지난 글) https://bedlocked.tistory.com/15 지난번에 만든 문서 스캔 프로그램을 Stramlit을 통해서 배포해보았다. 하지만 이 코드 그대로 배포할 수는 없었으니 그 이유는..openCV의 VideoCapture 대신 Streamlit의 camera_input을 사용해야했다. (아마 로컬이 아닌 클라우드 상에서 프로그램이 실행되기 때문인듯) 일반화 성능 개선을 위해 Canny Edge Detection 후 findContours를 통해 가장 큰 사각형을 찾는 방식으로 바꾸었다. 사진 촬영을 다시 해야하는 경우에는 위와 같이 findContours 결과를 보여준다. 촬영이 잘 된 경우는 이렇게 나온다. 수정된 코드는 아래에서 확인할 수 있다!github repository: h..

컴퓨터 비전 2025.12.28

openCV 활용한 문서 스캐너 프로그램 만들기

openCV 라이브러리를 활용해 문서 스캔을 해주는 프로그램을 만들어 보기로 했다. 처음에 구상한 구조는 다음과 같았다. 웹캠을 사용해 문서가 포함된 사진을 촬영한다↓Grayscaling 적용↓이미지에 Blur / Dilate 를 적용한다↓Corner detection 을 통해 이미지 내 문서의 네 모서리 좌표를 구한다↓구한 좌표를 토대로 Perspective Transform 을 적용해 문서로 꽉 채운 이미지를 만든다 우선 촬영한 이미지에 Blurring, Dilation 적용 없이 Corner Detection을 해보았다. Corner Detection에는 openCV의 goodFeaturesToTrack() 함수를 사용했다. corners = cv2.goodFeaturesToTrack(img_gr..

컴퓨터 비전 2025.12.16

[openCV] Morphological Operations in Images

모폴로지 연산(Morphological Operation)은 이미지 프로세싱의 한 가지 방법으로 이미지를 형태(shape) 관점에서 변형, 분석하며 주로 바이너리 이미지에 활용된다. 모폴로지 연산을 통해 노이즈 제거, 엣지 변형, 객체의 형태 분석 등을 해낼 수 있다. 연산의 종류로는 Erosion(침식), Dilation(팽창), Gradient, Opening, Closing 이 있다. Erosion이미지를 커널이 스캔하고, 커널의 모든 영역이 이미지의 객체 내부에 포함될 때 (교집합) 커널의 중심점의 집합이 Erosion의 결과가 된다. Erosion을 통해 커널보다 크기가 작은 white noise를 제거하거나 객체의 경계를 후퇴시킬 수 있다. Dilation이미지를 커널이 스캔하고, 커널의..

[openCV] Image Thresholding

이미지 임계 처리, Image Thresholding은 특정 임계값(threshold)를 기준으로 이미지의 픽셀값을 두 가지로 나누는 것이다. 물체와 배경을 분리하거나 이미지에서 특정 영역을 추출하는 가장 기본적인 방법으로 활용된다. 또한 텍스트 추출, 노이즈 제거 등에도 활용될 수 있다. 기본적인 binary thresholding에서는 픽셀값이 임계값보다 크면 255(흰색), 작으면 0(검은색)으로 변환한다. openCV에서는 binary thresholding의 여러가지 변형으로 몇가지를 제공한다. Binary Threshold Inverted: 임계값보다 크면 0, 작으면 255Truncated Threshold: 임계값보다 크면 임계값, 작으면 픽셀값 유지To Zero Threshold: 임계값..

[openCV] Image Transformation - Affine Transformation, Perspective Transformation

오늘은 opencv 라이브러리를 활용해 이미지의 transformation을 해보겠다. Affine Transformation과 Perspective Transformation 모두 한 이미지의 좌표를 다른 좌표로 변환하는 기하학적 변환이다. 둘의 차이점은 변환 가능한 형태와 변환의 자유도에 있다. Affine Transformation 우선 Affine Transformation은 이미지의 회전, 축소와 확대, 이동 등을 포함하는 변환이다. 변환 후에 원래 평행한 선들이 그대로 평행하게 유지된다는 특징이 있다. 이미지에 Affine Transformation을 적용하는 방법은 바로 행렬곱(Matrix Multiplication)을 활용하는 것이다. 그리고 행렬곱을 용이하게 하기 위해서 우리는 Homog..

[openCV] Image Blurring - Gaussian Blur, Median Blur, Bilateral Filter

오늘은 openCV 라이브러리를 이용해 Image Blurring을 해보겠다. Image Blurring은 이미지에서 픽셀값을 주변 픽셀값들과 유사하게 조절하는 것이다.이를 통해 이미지를 흐릿하게 만들거나 이미지에 포함된 노이즈를 제거하는 것에 활용될 수 있다. openCV에서 제공하는 여러가지 Blurring 기법이 있는데, 여기서 Gaussian Blur, Median Blur, Bilateral Filter 세가지를 사용해보겠다. Gaussian Blur Gaussian Blur 은 커널을 사용해 각 픽셀 주위의 값들에 가우시안 분포(정규 분포)를 사용해 가중치를 주어 픽셀값을 평균내고, 이때 가까운 픽셀값들에 더 큰 가중치를 부여해 자연스럽게 blur 한다. 직관적으로 생각했을 때 일정한 범위 안..