<
OpenCV 시작 겸 기본 클래스 정리
>
上一篇

BigGAN
下一篇

ASR(Automatic Speech Recognition) 정리

OpenCV 4.0

설치를해보자 일단은 C++ 기반으로 우분투에 GCC 설치 후

OpenCV 모듈

주요 모듈

설치

리눅스에선 역시나 소스코드를받아서 컴파일해야하는 수고로움이… 그래도 한번하면 편할테니 ㅠㅠ

https://webnautes.tistory.com/1030

여기를 참고하엿다 수많은 패키지를 설치하라고 하는데 중간에오류나기싫으면 최대한 다 설치해주자…

컴파일 후 실행하면 설치가 되는데 라이브러리 연결이…

$(pkg-config opencv4 00libs –cflags) 를 사용하면되는데ㅐ vscode에서 사용하려니 앞뒤로 ‘‘가 붙어서 못쓴다.. 그냥 띄어쓰기마다 ““로 나눠서 넣어주니 됨…

사용함수

MAT

이미지를 저장할 행렬 클래스

namespace cv

가장 기본 클래스

이미지관련

윈도우관련

기타

주요 클래스

자료형

uchar, CV_8U : unsigned char
schar, CV_8S : signed char
ushort, CV_16U : unsigned short
short, CV_16S : signed short
int, CV_32S : int
CV_32F : float
CV_64F : double
CV_16F : float16

Mat 생성방법

MAT mat6 = MAT_({2,3}, {1,2,3,4,5,6}) // 4.0부터 가능한 초기화법

MAT mat7; mat7.create(256, 256, CV_8UC3); // 비어있을시엔 생성, 기존의 행렬과 크기와 타입이 같을경우 아무것도안함, 다를경우 새로운 행렬 생성 mat7.setTo(5) // create는 초기화 기능이 없음

// 행렬 복사 MAT mat8 = mat7 ; MAT mat9; mat9 = mat7; // 복사생성자 및 대입연산자는 얕은복사를 수행

MAT mat8 = mat7.clone(); mat9 = mat7.copyTo(); // 깊은 복사용 생성자 및 깊은복사


## 행렬 부분추출 
- 모든 추출은 얕은 복사이므로 깊은복사시 .clone() 필요

MAT img1 = imrear(“cat.jpg”); img2 = img1(RECT(10,10,20,30)); // 원본 이미지의 부분추출 (얕은복사) img2 = img1.rowRange(1,10); // 1행부터 10행까지 추출 img2 = imt1.colRange(5,10); // 1열부터 10열까지 추출 img2 = img1.row(1) // 1행추출 img2 = img1.col(1) // 1열추출

float a = img1.at(5, 3) // 5행 3열 픽셀의 데이터 추출 float* = img1.ptr(3) // 3행의 첫번째 원소의 주소값 반환

for ( auto it = mat1.begin(); it !=mat.end; it++) (*it)++;

## 행렬 정보참조

Mat img1 = imread(“cat.jpg”); img1.channels(); // 채널수 반환 img1.depth(); // 깊이 반환? CV_8U 등. 이게 왜 깊이일까요? img1.elemSize() // 한개의 원소가 차지하는 메모리크기를 바이트단위로 반환 img1.elemSize1() // 한 채널에서 원소가 차지하는 메모리크기 바이트단위로 반환

## 행렬 연산

float data[] = {1,1,2,3}; Mat mat1(2,2, CV_32FC1, data); // 데이터로부터 mat1 생성 Mat mat2 = mat1.inv(); // Inverse 역행렬 Mat mat3 = mat1.t(); // Transpose 전치 Mat mat4 = mat1 + mat2; // 사칙연산 가능, * 은 원소별 연산 Mat mat5 = mat1.mul(mat2); // Matrics multiply 행렬곱


##  변환함수

Mat mat = Mat_({2,2},{1,3,2,4}); Mat mat2; mat.convertTo(mat2, CV_32FC1); // 32비트 float형으로 변환하여 mat2에 저장 mat3 = mat.reshape(0,1) // 형상의 변환, 채널과 행을 변화, 주의할 점은 형태변형이지만 참조이므로 원래 자료가 변할 수 있음 mat4 = mat.resize(3, 1) // 행수 변경 가능. 3행으로변경 후 빈값은 1로 초기화

mat_1 = Mat_({1,2},{3,4}); mat.push_back(mat_1r); // 열단위로 푸쉬가 이루어지므로 행이 같아야 입력 가능 mat.pop_back(2); // 아래부터 2행 제거, 팝이있는거보니 스택형인듯 ```

벡터와 스칼라

InputArray, OutputArray, InputOutputArray

Top
Foot