[OpenCV] 동전 검출 및 자동 계산기

토이 프로젝트를 진행하면서 기록을 해두고 싶어서 포스트잇 방식으로 씁니다.관련 코드는 아래 링크를 참고하여 만들었습니다.『OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝』 2022.05.07 OpenCV를 공부도 하고 글로도 정리하는데 머리속으로 잘 들어 오지 않아 간단한 토이 프로젝트를 해보기로 함.OpenCV 관련 네이버 카페를 찾아보니 동전을 검출하여 자동으로 계산해 주는 프로젝트가 보여서 시작.참고 네이버 카페 2022.05.09 대략적으로 개발 방향만 정함.  … Read more

[OpenCV] 엠보싱 필터링

이번 글에서는 엠보싱(Embossing) 필터링에 대해 알아보겠습니다. 엠보싱은 인쇄물이나 철판, 종이 등에 표현하고자 하는 것을 오목하거나 볼록하게 만든 것을 말하며, 영상 처리에서 엠보싱 필터링은 이러한 형태로 필터링 한것을 말합니다.아래 이미지는 레나 이미지를 엠보싱 필터링 처리한 이미지 입니다. 엠보싱 필터링은 픽셀 값의 변화가 작은 곳은 회색으로 설정하고, 경계와 같이 픽셀 값의 변화가 큰 곳에는 밝거나 어둡게 설정합니다.엠보싱 필터링에 사용되는 마스크는 … Read more

[OpenCV] 필터링 기본

이번 글에서는 필터링에 대해 기본적인 방법을 알아보겠습니다. 필터(filter)라는 말은 일상에서 보통, ‘원하지 않은 것들을 걸러내고, 원하는 것은 통과시키는 것’을 말합니다.영상에서의 필터링이란, 영상에서 원하지 않은 정보는 걸러내고, 원하는 정보는 통과시키는 작업을 말합니다.영상의 잡음을 제거하는 것을 필터링이라고 할 수 있으며, 샤프하게 만드는 것 또한 필터링이라고도 할 수 있습니다.영상의 필터링은 마스크라는 행렬을 이용하며, 그 모양은 3 x 3 또는 5×5, … Read more

[OpenCV] 안드로이드 Native C++ 사용

이번글에서는 안드로이드 스튜디오에서 Native C++을 사용해보겠습니다. ‘File’ – ‘New’ – ‘New Project’를 눌러 Native C++을 하나 생성해줍니다. 적당한 경로에 적당한 이름으로 만들어줍니다. 생성한 상태에서 바로 실행을 하게되면 아래와 같이 Hello From C++이라는 문구가 나타나게 됩니다. 우선 코드를 입력하기 전에 프로젝트에서 어떤부분에 입력해야하는지 체크부터 해보겠습니다.Navite C++로 프로젝트를 생성하게 되면 아래와 같이 MainActivity에 자동으로 loadLibrary와 stringFromJNI라는 함수가 생성됩니다. myapplication은 라이브러리, stringFromJNI는 … Read more

[OpenCV] Empty Activity에서 안드로이드 NDK 사용

이번 글에서는 안드로이드에서 OpenCV를 연동하기 전, NDK를 사용하는 방법에 대해 알아보겠습니다. 안드로이드 NDK는 C 및 C++와 같은 언어를 사용하여 네이티브 코드로 앱의 일부를 구현할 수 있게 하는 도구 모음입니다. 안드로이드 NDK를 사용할때 JNI라는 단어를 많이 듣게되는데 JNI의 풀네임은 자바 네이티브 인터페이스(Java Native Interface)라고 하며, 자바코드가 C, C++ 또는 어셈블리 같은 다른 언어들로 작성된 라이브러리들을 호출하거나 호출되게 … Read more

[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