[OpenCV] 라벨링 – 2. 응용(connectedComponentsWithStats )

이전 글에서 라벨링에 대해 기초적인 내용을 알아보았습니다. 이번 글에서는 객체의 정보를 알아내는 방법에 대해 알아보겠습니다. 기존 문제점 라벨링을 수행하여 객체의 개수를 파악하고 행렬에 객체의 번호를 부여하더라도 가공된 정보는 아닙니다.객체의 영역이나 무게중심 좌표 등, 개발자가 행렬의 값을 일일히 대조하여 객체의 정보를 확인 하는 것은 좋지 않은 일입니다. 함수 OpenCV에서는 객체의 영역 정보를 얻어낼 수 있는 connectedComponentsWithStats 함수가 있습니다. … Read more

[OpenCV] 라벨링(labeling) – 1. 기본

이전 글까지 영상에 대해 알아보고, 영상의 배경과 객체를 이진화를 통해 구별하였습니다. 이번 글에서는 이렇게 구별된 객체들을 각각의 객체로 구별 및 분석하는 라벨링 기법(또는 레이블링이라고도 함)에 대해 알아보겠습니다. 이해 영상에서 라벨링은 보통 이진화 영상에서 수행됩니다. 라벨링은 이진화된 영상의 검은색 픽셀(0)을 배경으로, 흰색 픽셀(255)을 객체로 인식합니다. 객체는 인접한 픽셀까지 하나의 객체로 인식하며, 하나의 객체를 이루는 모든 픽셀에는 같은 라벨링 번호가 부여됩니다. 아래 그림은 이진화 … Read more

[OpenCV] 모폴로지 – 열기(opening), 닫기(closing)

영상의 침식과 팽창에 대해 잘 모르신다면 여기를 참고하는 것이 좋습니다. 침식과 팽창 연산의 단점 이전 글에서 영상에서 침식(erode)와 팽창(dilate) 연산하여 잡음을 제거하는 작업을 해보았습니다. 이러한 연산의 단점은 기존 영상의 객체 영역을 변형시킨다는 것입니다. 위 예시에서만 보더라도 침식의 경우 글자가 얇아졌고, 팽창의 경우 글자가 두꺼워졌습니다. 이렇게 영상에 전반적인 영향을 주는 것은 결과적으로는 좋지 않습니다. 열기, 닫기 개념 모폴로지 … Read more

[OpenCV] 모폴로지 – 침식(erode), 팽창(dilate)

이번 글에서는 모폴로지의 기본적인 설명과 침식과 팽창에 대해 알아보겠습니다. 우선 모폴로지(morphology)는 형태학을 의미하며, 생물의 구조, 외형 등등 형태 또는 모양에 관한 학문을 의미합니다.영상처리에서 모폴로지는, 영상에서 객체의 형태 및 구조에 대해 분석하고 처리하는 기법을 의미합니다.모폴로지는 주로 객체를 단순화하거나 잡음 제거 용도로 많이 사용 됩니다.침식과 팽창은 이러한 모폴로지 기법 중에서 기본이 되는 연산입니다.침식과 팽창 연산을 하기 위해서는 구조 요소가 필요하며 … Read more

[OpenCV] 영상의 이진화 – adaptiveThreshold

이전 글에서는 영상의 이진화에 대해서 알아 보았고 threshold 에 대해서도 알아보았습니다. 이제 threshold 함수로 임계값을 설정하고, 임계값보다 크면 255, 작으면 0으로 만드는 이진화 작업을 할 수 있습니다.하지만 아래와 수도쿠 이미지에서는 한곳은 너무 어둡고,  한곳은 너무 밝아서 threshold 함수를 사용하는게 적절하지 않습니다. 그 이유는 이미지 좌하단과 우상단의 밝기 차이가 있어 적절한 임계값을 찾기 힘들기 때문입니다. 이 경우에는 adaptiveThreshold 함수를 사용하여 적절하게 영상을 이진화 … Read more

[OpenCV] 영상의 이진화 – threshold

이번 글에서는 그레이스케일 영상의 이진화에 대해 간략한 설명과 threshold 함수의 사용법에 대해 알아보겠습니다. 설명 영상의 이진화는 픽셀을 검은색 또는 흰색같이 두 개의 값으로 나누는 작업을 말합니다. 영상에서 의미가 있는 관심 영역(ROI)과 비관심 영역을 구분할 때 이진화가 사용됩니다. 예를 들어 특정 색상의 세포를 구분할 때, 수도쿠에 입력된 글자를 인식할 때 이진화를 사용합니다. 그레이스케일에서는 영상을 이진화 시킬 때 특정값 T를 정해놓고 픽셀 값이 특정값보다 … Read more

[OpenCV] 영상 산술 연산 – 3. 논리 연산(AND, OR, XOR, NOT)

이번 글에서는 영상의 논리 연산, 비트단위 연산인 AND, OR, XOR, NOT에 대해 알아보겠습니다. 영상에서의 비트단위 연산은, 영상에서의 픽셀값을 비트단위로 표현하여 논리연산을 수행하는 것을 말합니다.비트 단위 연산이라는 것에 대해서 처음 들어보신다면 여기를 참고하시길 바랍니다. 함수 원형 AND, OR, XOR, NOT의 함수는 모두 비슷하니 한꺼번에 알아보도록 하겠습니다. NOT 연산은 비트를 반전 시키므로 입력 영상이 하나이고 나머지 AND, OR, XOR은 … Read more

[OpenCV] 영상 산술 연산 – 2. 곱셈, 나눗셈

안녕하세요 이번 글에서는 영상에서의 산술 연산 곱셈 나눗셈에 대해 알아보겠습니다. 이전 글에서도 설명했지만 곱셈, 나눗셈은 잘 사용되지 않습니다. 곱셈 OpenCV에서는 곱셈 연산을 할 경우 multiply 함수를 사용합니다. 샘플 코드는 아래와 같습니다. 실행 결과는 아래와 같습니다. src1과 src2가 곱해져서 dst1에 입력되어 있는 것을 볼 수있습니다. 나눗셈 나눗셈에 대해 알아보겠습니다. 나눗셈은 divide 함수를 사용합니다. 샘플 코드는 아래와 같습니다. 실행 결과는 아래와 … Read more

[OpenCV] 영상 산술 연산 – 1. 덧셈, 뺄셈

안녕하세요 이번 글에서는 영상에서의 산술 연산에 대해 알아보겠습니다. OpenCV에서 영상은 행렬로 표현하기 때문에 두개의 영상을 더하거나 빼는 연산을 수행할 수 있습니다.영상의 덧셈, 뺄셈, 곱셈, 나눗셈 모두 가능하지만 곱하기, 나누기는 잘 사용하지 않습니다.먼저 덧셈, 뺄셈 연산에 대해 알아보겠습니다. 덧셈 OpenCV에서는 덧셈 연산을 할 경우 add() 함수를 사용합니다. 샘플 코드는 아래와 같습니다. 실행 결과는 아래와 같습니다. addWeighted 함수를 사용하면 두 영상을 … Read more

[OpenCV] 원 검출 – 허프 그래디언트(Hough gradient)

번 글에서는 허프 변환을 이용하여 원 검출 하는 방법에 대해 알아보겠습니다. 우선 원 검출 방법에 대해 알아보겠습니다. 중심 좌표가 (a, b)이고 반지름이 r인 원의 방정식은 아래와 같습니다. 위 방정식에서 파라미터는 3개이므로, 3차원 파라미터 공간에서 축적 배열을 정의 후 누적이 많은 위치를 찾아야 합니다.하지만 이 방식은 메모리와 시간을 많이 필요하므로 허프 그래디언트를 사용합니다. 허프 그래디언트는 아래 두 단계로 … Read more