-
setTo 함수컴공지식/컴퓨터비전 2024. 8. 31. 15:30
setTo 함수는 이미지나 행렬 내의 모든 값을 특정 값으로 설정하거나, 특정 조건에 맞는 부분만 특정 값으로 설정할 때 사용하는 함수다.
이 함수의 시그니처는 다음과 같다.
Mat setTo(InputArray value, InputArray mask = noArray());
InputArray value: Mat 행렬 또는 이미지의 모든 픽셀을 설정할 값이다.
이 값은 단일 값일 수도 있고, cv::Scalar 형태로 여러 채널을 한꺼번에 설정할 수도 있다.
예를 들어, RGB 이미지에서 (0, 255, 0)을 설정하면 모든 픽셀이 초록색이 된다.
InputArray mask = noArray(): 마스크는 선택적으로 사용하는 매개변수다.
이 매개변수를 사용하면 특정 조건에 맞는 픽셀만 설정할 수 있다.
마스크는 보통 이진 이미지(0과 255로 이루어진 흑백 이미지)로, 마스크 값이 0이 아닌 부분만 value로 설정된다.
이 매개변수를 생략하면, 행렬의 모든 값이 value로 설정된다.
예시 코드는 다음과 같다.
#include <opencv2/opencv.hpp>
int main() {
// 3x3 행렬을 생성하고 모든 값을 0으로 초기화
cv::Mat mat = cv::Mat::zeros(3, 3, CV_8UC1);
// 마스크 없이 행렬 전체를 255로 설정
mat.setTo(255);
std::cout << "마스크 없이 전체 설정:\n" << mat << std::endl;
// 다시 0으로 초기화
mat.setTo(0);
// 3x3 마스크 생성, 중앙값만 1로 설정
cv::Mat mask = (cv::Mat_<uchar>(3, 3) << 0, 0, 0, 0, 1, 0, 0, 0, 0);
// 마스크를 사용해 행렬의 중앙 값만 255로 설정
mat.setTo(255, mask);
std::cout << "마스크 사용하여 중앙값만 설정:\n" << mat << std::endl;
return 0;
}cv::Mat::zeros(3, 3, CV_8UC1): 3x3 크기의 행렬을 생성하고, 모든 값을 0으로 초기화한다.
mat.setTo(255): 마스크 없이 setTo를 사용해서 행렬의 모든 값을 255로 설정한다. 여기서는 전체 행렬이 255로 채워지게된다.
cv::Mat mask: 마스크는 3x3 행렬에서 중앙값만 1로 설정하고, 나머지는 0으로 설정한 거다.
mat.setTo(255, mask): 이 줄에서는 마스크를 사용해서 중앙값만 255로 설정한다. 마스크의 값이 1인 위치(중앙값)만 설정되고, 나머지는 변경되지 않는다.
출력은 다음과 같다
마스크 없이 전체 설정:
[255, 255, 255;
255, 255, 255;
255, 255, 255]
마스크 사용하여 중앙값만 설정:
[ 0, 0, 0;
0, 255, 0;
0, 0, 0]setTo가 유용한 이유는 행렬의 전체 또는 특정 부분을 빠르고 효율적으로 원하는 값으로 설정할 수 있고 특정 조건에 맞는 부분만 바꾸는 작업이 매우 쉬워진다.
'컴공지식 > 컴퓨터비전' 카테고리의 다른 글
imread 함수 (0) 2024.08.31 픽셀의 값이 바뀐다는 건 뭘까? (0) 2024.08.31 convertTo 함수 (0) 2024.08.31 resize 함수 (0) 2024.08.31 waitKey 함수 (0) 2024.08.31