본문 바로가기
런닝머신 (ML)

[컴퓨터 비전 & 머신러닝] 유용한 OpenCV 기능

728x90
cout << "cvRound(2.5) : " << cvRound(2.5) << endl;
cout << "cvRound(2.51) : " << cvRound(2.51) << endl;
cout << "cvRound(3.4999) : " << cvRound(3.4999) << endl;
cout << "cvRound(3.5) : " << cvRound(3.5) << endl;

//cvRound(2.5) : 2
//cvRound(2.51) : 3
//cvRound(3.4999) : 3
//cvRound(3.5) : 4

마스크 연산

setTo() 함수 : 마스트 연산에서 사용하는 함수로 행렬의 픽셀 값을 설정하는 함수

void mask_setTo()
{
	Mat src = imread("lenna.bmp", IMREAD_COLOR);
	Mat mask = imread("mask_smile.bmp", IMREAD_GRAYSCALE);


	if (src.empty() || mask.empty()) {
		cerr << "Image load failed!" << endl;
		return;
	}

	imshow("lena", src);

//mask영상에서 픽셀 값이 0이 아닌 위치에서만 scr 영상 픽셀을 노란색으로 설정
	src.setTo(Scalar(0, 255, 255), mask);

	imshow("src", src);
	imshow("mask", mask);

	waitKey(0);
	destroyAllWindows();
}

마스크 영상에서 흰색으로 표시된 영역에 대해서만 레나 영상 픽셀이 노란색으로 설정되는 것을 확인 할 수 있다.

 


 

copyTo() 함수 : 행렬 복사 함수로 두가지 형태로 정의되어 있는데, 하나는 복사할 대상 행렬 하나만 인자로 받고, 다른 하나는 복사할 대상 행렬과 마스크 영상 두개를 인자로 받는다

void mask_copyTo()
{
	Mat src = imread("airplane.bmp", IMREAD_COLOR);
	Mat mask = imread("mask_plane.bmp", IMREAD_GRAYSCALE);
	Mat dst = imread("field.bmp", IMREAD_COLOR);

	if (src.empty() || mask.empty() || dst.empty()) {
		cerr << "Image load failed!" << endl;
		return;
	}

	imshow("배경", dst);

//mask 영상에서  흰색 영역 위치에서만 scr 영상 픽셀 값을 dst로 복사
	src.copyTo(dst, mask);

	imshow("src", src);
	imshow("dst", dst);
	imshow("mask", mask);

	waitKey(0);
	destroyAllWindows();
}


sum() 함수 : Mat 행렬의 원소 합을 구하는 함수

mean() 함수 : Mat 행렬의 원소 평균을 구하는 함수

 

lenna 사진이 그레이스케일일때  영상에 대한 모든 픽셀 값의 합과 평균을 구하는 코드이다

Mat img = imread("lenna.bpm", IMREAD_GRAYSCALE);

cout << "Sum : " << (int)sum(img)[0] << endl;
cout << "Mean : " << (int)mean(img)[0] << endl;

//Sum : 32518590
//Mean : 124

 


minMaxLoc() 함수 : 주어진 행렬의 최댓값, 최솟값을 찾는 함수

double minVal, maxVal;
Point minPos, maxPos;
minMaxLoc(img, &minVal, &maxVal, &minPos, &maxPos);

cout << "minVal : " << minVal << " at " << minPos << endl;
cout << "maxVal : " << maxVal << " at " << maxPos << endl;

//minVal : 25 at [508, 71] 
//가장 작은 픽셀은 25이고, 위치는 508, 71에 위치함
//maxVal : 245 at [116, 273]
//가장 큰 픽셀은 245이고, 위치는 116, 273에 위치함

normalize() 함수 : 행렬의 노름 값을 정규화하거나 또는 원소 값 범위를 특정 범위로 정규화 할 때 사용하는 함수

Mat src = Mat_<float>({ 1, 5 }, { -1.f, -0.5f, 0.f, 0.5f, 1.f });

Mat dst;
normalize(src, dst, 0, 255, NORM_MINMAX, CV_8UC1);

cout << "src : " << src << endl;
cout << "dst : " << dst << endl;

//scr : [-1, -0.5, 0, 0.5, 1]
//dst : [0, 64, 128, 191, 255]

cvRound() 함수 :  실수 값의 반올림 연산을 해주는 함수

 

728x90