수색…


소개

이 항목에서는 OpenCV의 기본 구조에 대해 설명합니다. 이 항목에서 논의 할 구조는 DataType , Point , Vec , Size , Rect , Scalar , PtrMat 입니다.

데이터 형식

OpenCV의 기본 유형은 unsigned char, bool, signed char, unsigned short, signed short, int, float, double 입니다. OpenCV의 모든 데이터 유형은 CV_<bit-depth>{U|S|F}C(<number_of_channels>) 여기서 U: unsigned , S:signedF:floating point 입니다.

예를 들어, CV_32FC2 는 32 비트, 부동 소수점 및 2 채널 구조입니다. 기본적인 채널 유형 정의는 다음과 같습니다.

#define CV_8U   0
#define CV_8S   1
#define CV_16U  2
#define CV_16S  3
#define CV_32S  4
#define CV_32F  5
#define CV_64F  6
#define CV_USRTYPE1 7

높은 채널을 가진 다른 유형은 다음 정의에 의해 생성됩니다.

#define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT))

이러한 데이터 유형을 사용하여 다른 구조를 만들 수 있습니다.

매트

Mat (Matrix)는 RGB, HSV 또는 회색 음영 이미지, 실수 또는 복소수 값을 갖는 벡터, 기타 행렬 등 다양한 유형의 데이터를 저장하는 데 사용할 수있는 n 차원 배열입니다.

Matwidth , height , type , channels , data , flags , data datastart , data dataend 등의 정보를 포함합니다.

여기에는 몇 가지 메소드가 있으며, 그 중 일부는 create , copyTo , convertTo , isContinious 등입니다.

매트 변수를 만드는 방법은 여러 가지가 있습니다. 100 행, 200 열, CV_32FC3 유형의 행렬을 만들고 싶습니다.

int R = 100, C = 200;
Mat m1; m1.create(R,C,CV_32FC3);//creates empty matrix
Mat m2(cv::Size(R, C), CV_32FC3); // creates a matrix with R rows, C columns with data type T where R and C are integers, 
Mat m3(R,C,CV_32FC3); // same as m2

매트 초기화 중 :

Mat m1 = Mat::zeros(R,C,CV_32FC3); // This initialized to zeros, you can use one, eye or cv::randn etc.
Mat m2(R,C,CV_32FC3);
for (int i = 0; i < m2.rows; i++)
    for (int j = 0; j < m2.cols; j++)
        for (int k = 0; k < m2.channels(); k++)
            m2.at<Vec3f>(i,j)[k] = 0;
//Note that, because m2 is a float type and has 3 channels, we used Vec3f, for more info see Vec 

Mat m3(3, out, CV_32FC1, cv::Scalar(0));

Vec (벡터)는 수치 값을위한 템플릿 클래스입니다. c++ vector 와 달리, 일반적으로 짧은 벡터를 저장합니다 (단 몇 개의 요소 만 포함).

Vec 정의 방법은 다음과 같습니다.

 typedef Vec<type, channels> Vec< channels>< one char for the type>;

여기서 type은 uchar, short, int, float, double 중 하나이며 각 유형의 문자는 각각 b, s, i, f, d 입니다.

예를 들어, Vec3b 는 3 채널의 부호없는 char 벡터를 나타냅니다. RGB 이미지의 각 인덱스는이 형식입니다.

Mat rgb = imread('path/to/file', CV_LOAD_IMAGE_COLOR);  
cout << rgb.at<Vec3b>(0,0); //The output is [r g b] values as ASCII character.
// To print integer values of RED value
cout << (int)rgb.at<Vec3b>(0,0)[0]; //The output will be an integer in [0, 255].

Vec 클래스에서 다음 연산자가 정의됩니다.

v1 = v2 + v3
v1 = v2 - v3
v1 = v2 * scale
v1 = scale * v2
v1 = -v2
v1 += v2 and other augmenting operations
v1 == v2, v1 != v2

자세한 내용은 링크를 참조하십시오.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow