[OpenCV] 4. 히스토그램 평활화(Histogram Equalization)

이번 글에서는 히스토그램 평활화(histogram equalization)에 대해 알아보겠습니다.히스토그램 평활화는 스트레칭과 마찬가지로, 영상의 픽셀 값이 영상 영역 전체에 골고루 분포하도록 하는 알고리즘입니다. 아래와 같이 명암비가 낮은 이미지와 히스토그램이 있습니다. 명암비가 낮고 분포가 한곳에 몰려있는 영상 명암비가 낮고 분포가 한곳에 몰려있는 영상 영상의 픽셀값이 골고루 퍼져있지 않은 것도 문제지만, 특정 픽셀 값에 분포가 너무 몰려 있습니다.이 경우에 스트레칭으로 … Read more

[OpenCV] 3. 히스토그램 스트레칭(Histogram Stretching)

저번 글에서는 히스토그램의 개념에 대해 간단히 알아보았습니다.이번 글에서는 히스토그램 개념에서 더 나아가 히스토그램 스트레칭(Histogram Stretching)에 대해 알아보겠습니다. 우선 영상의 명암의 변화가 히스토그램 모양에 어떤 변화가 생기는지 알아보겠습니다.그레이스케일의 레나 이미지가 전반적으로 어두워질 경우 히스토그램의 위치가 좌측으로 많이 치우쳐집니다. 어두운 영상 어두운 영상 만약 영상이 전반적으로 밝아질 경우 히스토그램의 위치가 우측으로 많이 치우쳐 집니다. 밝은 영상 밝은 영상 이처럼 … Read more

[OpenCV] 2. 히스토그램 개념

이번 글에서는 히스토그램(Histogram)에 대해 알아보겠습니다. 그레이스케일 영상에서 히스토그램은 픽셀의 밝기값의 분포를 그래프 형태로 나타낸 것을 말합니다. 위와 같은 4X4 크기의 이미지가 있습니다.위 이미지는 0 ~ 7값을 가지며, 각 값들의 개수를 세어서 그래프 형태로 표현한 그림은 아래 그림과 같습니다. 위 그래프를 히스토그램 그래프라고 합니다.여기서 X축을 히스토그램 빈(bin)이라고 하고, 그레이스케일 영상에서는 0 ~ 255의 값을 가지므로 히스토그램 빈 개수는 보통 … Read more

[OpenCV] 1. 그레이스케일에서 영상 명암

이번글에서는 영상의 명암에 대해 알아보겠습니다. 영상에서 명암비란 밝기 차이의 강도를 의미하고, 전반적으로 비슷한 밝기의 픽셀로 이루어질 경우 명암비가 낮다고 하고 밝은 픽셀과 어두운 픽셀이 골고루 있을 경우 명암비가 높다고 합니다. 오른쪽 레나가 왼쪽 레나보다 명암비가 높습니다. 오른쪽 레나가 왼쪽 레나보다 명암비가 높습니다. 영상에서 명암비를 높이기 위해서는 어두운 부분을 더 어둡게 만들고, 밝은 부분을 더 밝게 만들어야 합니다.어두운 부분과 밝은 부분의 기준이 … Read more

[OpenCV] 그레이스케일에서 영상 밝기

이번 글에서는 영상의 밝기에 대해 알아보겠습니다. 그레이스케일 영상에서 픽셀값은 0 ~ 255 값을 가지는데 255에 가까울수록 밝아지고,  0에 가까울수록 어두워집니다. 영상 밝기를 증가시키는 코드는 아래와 같습니다. 반대로 영상을 어둡게 할 경우 아래와 같이 마이너스 연산을 하면 됩니다. 위와 같은 방법으로 할 경우 픽셀 값이 0보다 작거나, 255보다 크게 연산 결과가 나오더라도 자동으로 0과 255로 맞춰지게 … Read more

[OpenCV] 마스크 연산 – setTo, copyTo

이번 글에서는 setTo와 copyTo 함수에 대해 알아보겠습니다. setTo 우선 setTo부터 알아보겠습니다. setTo 함수를 사용하기 위해서는 원본 영상과 마스크 영상의 크기가 같아야 합니다. 또한 보통 마스크 영상은 0 또는 255로 구성된 흑백 영상이 사용됩니다. 아래와 같이 가운데가 흰색으로 뚫려있는 이미지가 있을 때, setTo함수를 사용하면 흰색 부분에 노란색으로 설정합니다. 실행 결과는 아래와 같습니다. copyTo 그 다음으로 copyTo에 … Read more

[OpenCV] 트랙바 사용하기 – createTrackbar

 이번 글에서는 createTrackbar 함수를 사용하여 OpenCV에서 제공하는 트랙바를 만들어보겠습니다. 아래는 createTrackbar에 대한 설명입니다. createTrackbar의 6번째 인자는 콜백 함수가 입력 됩니다. 콜백 함수로 사용되는 TrackbarCallBack에 대한 정의는 아래와 같습니다. 아래는 샘플 코드입니다. 위 함수를 실행하면 이미지의 밝기값을 변경할 수 있는 트랙바가 생성됩니다.

[OpenCV] 키보드, 마우스 이벤트 처리

이번 글에서는 키보드와 마우스 이벤트를 처리하는 방법을 알아보겠습니다. 키보드 이벤트 처리는 이전 글에도 많이 나왔던 waitKey 함수를 사용하면 됩니다.  waitKey의 반환으로 입력된 키에 대한 아스키 코드 값을 반환합니다.아래 코드는 키 ‘a’, ‘b’를 입력 했을 때 각 키에 대해 출력을 하는 프로그램 입니다. 마우스 이벤트 처리는 setMouseCallback 함수를 사용하면 됩니다. 2번째 인자를 보면 cv::MouseCallback 타입으로 되어 있습니다. … Read more

[OpenCV] 텍스트 출력 – putText

이번 글에서는 영상에 텍스트를 출력하는 것을 알아보겠습니다. 텍스트를 출력하기 위해서는 putText 함수를 사용하면 됩니다. 샘플 코드는 아래와 같습니다. 실행 하면 아래와 같이 출력합니다.

[OpenCV] 도형 그리기 – rectangle, circle, ellipse, polylines

이번 글에서는 OpenCV에서 제공하는 도형 그리기에 대해 알아보겠습니다. 대표적으로 사각형, 원, 타원, 다각형을 그리는 방법을 알아보겠습니다. 사각형 사각형을 그리기 위해서는 rectangle 함수를 사용해야합니다. 원 원을 그리기 위해서는 circle 함수를 사용하면 됩니다. 타원 타원을 그리기 위해서 ellipse 함수를 사용하면 됩니다. 다각형 다각형은 polylines 함수를 사용하면 됩니다. 위 모든 함수에 대하여 인자 thickness에 -1을 입력하면 내부를 채웁니다. … Read more