본문 바로가기
OpenCV

OpenCV ] setTo(), copyTo() 함수와 마스크 연산

by eteo 2022. 8. 18.

 

OpenCV 일부 함수에서는 ROI 설정을 위한 mask 연산을 지원한다. 보통 마스크 영상으로는 픽셀 값이 0 또는 255 로 구성된 흑백 영상이 사용되고, 인자에 마스크 영상이 주어진 경우 마스크 행렬의 원소가 0이 아닌 위치에서만 연산이 수행된다.

 

 

마스크 영상을 이용한 픽셀 값 설정

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

	src.setTo(Scalar(0, 255, 255), mask);

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

	waitKey(0);
	destroyAllWindows();
}

 

mask 영상에서 픽셀 값이 0이 아닌 위치에서만 src 영상 픽셀을 노란색(0, 255, 255)로 설정한다.

 

 

 

 

 

 

 

마스크 영상을 이용한 픽셀 값 복사

 

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

	src.copyTo(dst, mask);

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

	waitKey(0);
	destroyAllWindows();
}

 

 

 

 

예제 출처 : OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝