.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;
}