.Net 교육/OpenCV(C++)
OpenCV(C++) - 기본데이터 타입
pi92
2021. 5. 17. 13:02
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(void)
{
// 행렬(height , width)
Matx <float, 2, 3> m1 (1,2,3,4,5,6);
cout << "[m1] = "<< endl << m1 << endl;
//m1(행, 열)
cout << m1(0, 0) << endl;
cout << m1(1, 2) << endl;
Matx23f m2(1, 2, 3, 4, 5, 6);
cout << "[m2] = " << endl << m2 << endl;
return 0;
}
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
//CV_8U 은 생략형이다 CV_8UC1
//#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_16F 7
int main(void)
{
// 행, 열, CV_타입채널
// 행, 열, CV_타입1
// Pixel (Gray)
//ex1)
Mat m1(2, 3, CV_8U);
cout << "[m1] = " << endl << m1 << endl;
//ex2)
// Mat m2(2, 3, CV_8U, 20);
Mat m2(2, 3, CV_8U, Scalar(20)); //Scalar 는 내부에 sRGB 값이 들어갈 수 있다.
cout << "[m2] = " << endl << m2 << endl;
return 0;
}
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(void)
{
// 행, 열, CV_타입채널
// 행, 열, CV_타입1
// Pixel (Gray)
//ex1)
Mat m1(2, 3, CV_8U);
cout << "[m1] = " << endl << m1 << endl;
//ex2)
// Mat m2(2, 3, CV_8U, 20);
// Red[0 255] [0 65534] [0 65534] [0 65534]
// 초기화 방법
//Scalar 는 내부에 sRGB 값이 들어갈 수 있다.
// 최대값 255로 고정
Mat m2(2, 3, CV_8U, Scalar(400));
cout << "[m2] = " << endl << m2 << endl;
float data[] =
{
1.1f, 2.2f, 3.3f,
4.4f, 5.5f, 6.6f
};
Mat m3(2, 3, CV_32F, data);
cout << "[m3] = " << endl << m3 << endl;
double data1[] =
{
1.1, 2.2, 3.3,
4.4, 5.5, 6.6
};
Mat m4 = (Mat_<uchar>(2, 4) << 1, 2, 3, 4, 5, 6, 7, 8);
cout << "[m4] = " << endl << m4 << endl;
return 0;
}
int main(void)
{
//Mat static
cout << CV_8U << endl;
cout << CV_8UC1 << endl;
Mat m1 = Mat::ones(3, 4, CV_8U);
cout << "[m1] = " << endl << m1 << endl;
Mat m2 = Mat::zeros(3, 4, CV_8U);
cout << "[m2] = " << endl << m2 << endl;
Mat m3 = Mat::eye(3, 4, CV_8U); //eye 단위행렬
cout << "[m3] = " << endl << m3 << endl;
return 0;
}
int main(void)
{
Mat_<int> m1(2, 4, 100);
m1 << 1, 2, 3, 4, 5, 6, 7, 8;
// 부모 = 자식; // 부 = 자
// 업캐스팅
Mat m2 = m1;
cout << "[m2] = " << endl << m2 << endl;
Mat m3(5, 3, CV_32FC3); // float(b) float(g) float(r)
cout << "차원수 = " << m3.dims << endl;
cout << "행 개수 = " << m3.rows << endl;
cout << "열 개수 = " << m3.cols << endl;
cout << "행렬 크기 = " << m3.size() << endl;
cout << "전체 원소(픽셀) 크기 = " << m3.total() << endl;
cout << "한 원소(픽셀) 크기 = " << m3.elemSize() << endl;
cout << "채널당 원소의 크기 = " << m3.elemSize1() << endl;
cout << "채널의 개수 = " << m3.channels() << endl;
// #define CV_32F 5
cout << "깊이 = " << m3.depth() << endl;
// 1. 원소(화소)1개 : float(b) float(g) float(r)
// 2. CV_32FC3 선택한다.
// 3. CV_깊이채널 : >> CV_깊이(5)채널(3)
// 4. CV_32FC3의 상수값은 21이다.
cout << "CV_32FC3 = " << CV_32FC3 << endl;
return 0;
}
int main(void)
{
//1.(+,-,/)는 성분끼리 일어난다.(*,%는 없다.)
Mat m1(2, 3, CV_8U, 13); //13
Mat m2(2, 3, CV_8U, 3); //3
cout << endl << m1 + m2 << endl; //모든 성분의 값 : 13 +3 =16
cout << endl << m1 - m2 << endl; //모든 성분의 값 : 13 -3 =10
//2. 성분끼리 곱하고 싶은 경우
cout << m1.mul(m2) << endl; //모든 성분의 값 : 13 *3 =32
//3. *는 수학적인 곱을 의미한다.
//
//4. float에서만 연산이 가능하다.
Mat m3(2, 3, CV_32F, 3.0f);
Mat m4(3, 2, CV_32F, 4.0f);
cout << m3 * m4 << endl << endl;
//5. Mat * 스칼라 : 4칙 연산 모두 성립한다.
Mat m5(2, 3, CV_8U, 3);
cout << m5 + 3 << endl << endl;
cout << m5 - 3 << endl << endl;
cout << m5 * 3 << endl << endl;
cout << m5 * 0.3 << endl << endl;
cout << m5 / 3 << endl << endl;
// 6. 정수에 대한 / 에 대해서는 결과값에 대하여 사사오입이 일어한다
// 7. 스칼라 대입시에 모두 초기화가 된다.
Mat m6(2, 3, CV_8U, 5);
m6 = 100;
cout << m6 << endl << endl;
// 8.
Mat m7 = m6;
cout << m7 << endl << endl;
m7 = 200;
cout << "[m6] = " << m6 << endl << endl;
return 0;
}
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
//cout << "[m2] = " << endl << m2 << endl;
void matInfo(string n, Mat m)
{
cout << "[" << n << "행렬]" << endl;
cout << "채널수 = " << m.channels() << endl;
cout << "행 x 열 = " << m.rows << " X " << m.cols << endl << endl;
cout << m << endl << endl;
}
int main(void)
{
// Mat 크기 변동, 형태
Mat m = (Mat_<uchar>(2, 4) << 1, 2, 3, 4, 5, 6, 7, 8);
cout << "[m] = " << endl << m << endl << endl;
//로우 크기 변경
// 작으면 잘라버리고, 많으면 행이 추가된다.
m.resize(1);
cout << "[m] = " << endl << m << endl << endl;
m.resize(3);
cout << "[m] = " << endl << m << endl << endl;
m.resize(5, 100);
cout << "[m] = " << endl << m << endl << endl;
Mat m1 = (Mat_<uchar>(2, 6) << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
matInfo("m1", m1);
// 채널 변경
Mat m2 = m1.reshape(2);
matInfo("m2", m2);
// 채널, 로우
Mat m3 = m1.reshape(3, 2);
matInfo("m3", m3);
m1.create(3, 5, CV_16S);
matInfo("m1", m1);
return 0;
}
int main(void)
{
double data[] = { 1.1, 2.2, 3.3, 4.4,
5.5, 6.6, 7.7, 8.9,
9.9, 10, 11, 12 };
Mat m1(3, 4, CV_64F, data);
Mat m2 = m1.clone();
Mat m3, m4;
m1.copyTo(m3);
m1.convertTo(m4, CV_8U);
cout << "m1 = " << m1 << endl << endl;
cout << "m2 = " << m2 << endl << endl;
cout << "m3 = " << m3 << endl << endl;
cout << "m4 = " << m4 << endl << endl;
return 0;
}
int main(void)
{
vector<float> v1(5, 3.14f);
//cout << v1 << endl;
//첫 인자가 행 갯수이고 두번째가 초기값 설정
cout << (Mat)v1 << endl;
Mat m1 = (Mat)v1;
cout << m1.channels() << endl;
cout << m1.rows << endl;
cout << m1.cols << endl;
cout << ((Mat)v1).reshape(1, 1) << endl;
//
vector<Point> v2;
v2.push_back(Point(1, 2));
v2.push_back(Point(3, 4));
v2.push_back(Point(5, 6));
cout << v2.size() << endl;
cout << v2 << endl;
cout << (Mat)v2 << endl;
cout << ((Mat)v2).reshape(1, 2) << endl;
int ar1[] = { 10, 20, 30, 40, 50, 60 };
int num; // &num
// ar1[0] &ar1[0]
//*(ar1+0) ar1
vector<int> v3(ar1, ar1 + sizeof(ar1) / sizeof(int));
cout << ((Mat)v3).reshape(1, 1) << endl;
Size ar2[] = { Size(1,2), Size(3,4), Size(5,6) };
vector<Size> v4(ar2, ar2 + sizeof(ar2) / sizeof(Size));
cout << "last : " << ((Mat)v4).reshape(1, 1) << endl;
return 0;
}
int main(void)
{
int arr[] = { 10, 20, 30, 40, 50 };
vector<int> v1(arr, arr + sizeof(arr) / sizeof(int));
cout << v1.size() << endl;
cout << ((Mat)v1).reshape(1, 1) << endl;
v1.insert(v1.begin() + 2, 100);
cout << ((Mat)v1).reshape(1, 1) << endl;
v1[0] = 300;
cout << ((Mat)v1).reshape(1, 1) << endl;
v1.erase(v1.begin() + 3);
cout << ((Mat)v1).reshape(1, 1) << endl;
v1.clear();
return 0;
}