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로 배우는 컴퓨터 비전과 머신 러닝
'OpenCV' 카테고리의 다른 글
OpenCV ] 유용한 함수들. sum(), mean(), minMaxLoc(), normalize(), cvRound() (0) | 2022.08.18 |
---|---|
OpenCV ] 연산 시간 측정, TickMeter 클래스 또는 getTickCount() 와 getTickFrequency() 함수 사용 (0) | 2022.08.18 |
OpenCV ] 데이터 파일 입출력 (0) | 2022.08.18 |
OpenCV ] 트랙바 (슬라이더 컨트롤) 사용하기 (0) | 2022.08.18 |
OpenCV , C++ ] 키보드와 마우스의 이벤트 처리 (0) | 2022.08.16 |