Computer Vision 44

[OpenCV] 히스토그램

히스토그램(histogram)이란 표로 되어 있는 도수 분포를 정보 그래프 형태로 표현한 것이다. ​ 영상의 히스토그램(histogram)이란 영상의 픽셀 값 분포를 그래프 형태로 표현한 것을 의미한다. 그레이스케일 영상의 경우, 각 그레이스케일 값에 해당하는 픽셀이 개수를 구하고 이를 막대 그래프 형태로 표현함으로써 히스토그램을 구할 수 있다. ​ 4 x 4 영상이 있다고 가정하고, 이 영상 의 픽셀이 0 ~ 7 사이의 밝기를 가질 수 있는 형태의 영상이 있다. 영상을 이루고 있는 각각의 밝기에 해당하는 픽셀 개수를 세어서 막대그래프 형태로 표현한 것이 히스토그램이다. ​ ​ 히스토그램 그래프에서 가로축을 히스토그램의 빈(bin) 이라고 한다.' ​ 위의 히스토그램에서 빈 개수는 8개 이다. 픽셀이 0..

[OpenCV] 영상 밝기 및 명암 조절

OpenCV에서 영상 밝기 조절은 덧셈 연산(밝기) 와 곱센 연산(명암)이 있다. ​ ​ 영상의 밝기 조절 ​ 영상의 밝기(brightness) 조절이란 영상의 전체적인 밝기를 조절하여 더 밝게 만들거나 어둡게 만드는 작업이다. 영상의 밝기를 조절하려면 입력 영상의 모든 픽셀에 일정 값을 더하거나 빼는 연산 작업을 수행하면 된다. ​ 모든 픽셀 값에 양수 값을 더하면 영상이 밝아지고, 양수 값을 빼면 영상이 어두워진다. ​ 영상의 밝기 조절을 수식으로 표현할 수 있다. dst(x, y) = src(x, y) + n dst : 출력 영상 src : 입력 영상 n : 조절할 밝기 값 n이 양수이면 dst(출력 영상)의 전체적인 밝기가 증가하고, n이 음수이면 밝기가 감소하여 어두워진다. ​ 영상의 밝기 조절..

[OpenCV] FileStorage, FileNode 클래스

OpenCV에서 Mat 클래스에 저장된 영상 데이터는 imwrite() 함수를 이용하여 PNG, JPG, BMP 등 영상 파일로 저장할 수 있다. 하지만, uchar 자료형을 사용하는 영상이 아닌 int, double, float 등의 자료형을 일반적인 행렬은 영상 파일 형식으로 저장할 수 없다. ​ OpenCV에서 제공하는 FileStorage 클래스는 Mat 클래스 객체뿐만이 아니라 일반적인 C/C++ 자료형 데이터를 XML, YAML, JSON 등 파일 형식으로 저장하는 기능을 제공한다. ​ ​ FileStorage 클래스 OpenCV에서 데이터 파일 입출력을 하는 클래스이다. 데이터 파일의 입출력 기능을 캡슐화하여 지원한다. class FileStorage { public: FileStorage(..

[OpenCV] 이벤트 처리 인터페이스

OpenCV는 영상 출력 창에서 발생하는 키보드 입력, 마우스 이벤트 등 사용자에게 전달하는 인터페이스를 제공하며. 이를 이용하면 프로그램 동작 시 사용자 입력을 실시간으로 처리하는 영상 처리 응용 프로그램을 만들 수 있다. ​ 키보드 이벤트 처리 함수 ​ waitKey(); int waitKey(int delay = 0); delay : 키 입력을 기다릴 시간(ms 단위). delay

[OpenCV] 문자열 출력

openCV에서 영상에 직접 영상 처리 결과 또는 추가적인 정보를 문자열 형태로 나타낼 수 있는 함수를 제공한다. ​ ​ putText(); void putText(InputOutputArray img, const String& text, Point org, int fontFace, double fontScale, Scalar color, int thickness = 1, int lineType_LINE_8, bool bottomLeftOrigin = false); img : 입출력 영상 text : 출력할 문자열 org : 영상에서 문자열을 출력할 위치의 좌측 하단 좌표 fontFace : 폰트 종류로 cv::HersheyFonts에서 선택 가능 fontScale : 폰트 크기 확대/축소 비율 colo..

[OpenCV] 도형 그리기

OpenCV 에선 사각형, 원, 다각형 등 도형에 관한 여러 가지 함수들을 제공한다. ​ rectangle(); void rectangle(InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0); void rectangle(InputOutputArray img, Rect rec, const Scalar& color, int thickness = 1, int linetype = LINE_8, shift = 0); img : 입출력 영상 pt1 : 사각형 꼭지점 좌표 (Point 객체) pt2 : pt1과 대각 방향에 있는 사곽형 꼭지점 좌표 (P..

[OpenCV] 직선 그리기

그리기 함수는 영상 위에 직선을 그리는 line() 함수가 있다. line() 함수는 cv 네임스페이스 안에 선언되어 있다. ​ line(); void line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0); img : 입출력 영상 pt1 : 시작점 pt2 : 끝점 color : 색 선상(밝기) thickness : 선 두께 lineType : 선 타입. LINE_4, LINE_8, LINE_AA 중 하나를 지정할 수 있다. shift : 그리기 좌표 값의 축소 비율 (오른쪽 비트 시프트 연산 >> ) line() 함수는 img 영상 ..

[OpenCV] VideoCapture 클래스

VideoCapture 클래스란? 카메라 또는 동영상 파일로부터 정지 영상 프레임을 받아올 수 있는 클래스이다. ​ 동영상이란 일련의 정지 영상을 압축하여 파일로 저장한 형태로, 이때 동영상에 저장되어 있는 일련의 정지 영상을 프레임(frame) 이라고 한다. 그러므로 동영상을 처리하는 작업은 동영상에서 프레임을 추출한 후, 각각의 프레임에 영상 처리 기법을 적용하는 형태로 이루어진다. ​ 컴퓨터에 연결된 카메라 장치를 사용하는 작업도 카메라로부터 일정 시간 간격으로 정지 영상 프레임을 받아와서 처리하는 형태이다. class VideoCapture { public: VideoCapture(); VideoCapture(const String& filename, int apiPreference = CAP_A..

[OpenCV] InputArray, OutputArray 클래스

InputArray 와 OutputArray 클래스는 OpenCV 함수 인자로 자주 사용된다. ​ InputArray 클래스는 주로 OpenCV 함수의 입력으로 사용되고, OutputArray 주로 클래스는 OpenCV 함수의 출력으로 사용되는 인터페이스 클래스이다. ​ InputArray 클래스 InputArray 타입의 인자를 사용하는 함수는 자주 볼 수 있다. InputArray 클래스는 Mat, vector 등 다양한 타입을 표현할 수 있는 인터페이스 클래스이다. typedef const _InputArray& InputArray InputArray 클래스는 위와 같은 형태의 이름 재정의가 되어 있다. ​ Mat, Mat_, Matx, vector, vector, vector, ..

[OpenCV] Scalar 클래스

OpenCV 에서 Mat 클래스 다음으로 자주 사용되는 클래스가 Scalar 클래스이다. Scalar 클래스는 영상에서 픽셀 값을 표현하는 용도로 자주 사용된다. ​ Scalar 클래스는 Scalar_ 라는 이름의 클래스 템플릿 이름 재정의 이며, Scalar_ 클래스는 Vec 클래스를 상속받아 만들어졌다. template class Scalar_ : public vec { public: Scalar_(); // Scalar_ 클래스 기본 생성자 Scalar_(_Tp, v0); // Scalar_ 클래스 생성자 Scalarl_(_Tp v0, _Tp v1, _Tp v2=0, _Tp v3=0); static Scalar_ all(_Tp v0); // Scalar_::all() 멤버 함수는 4개의 val 배열..