-
Mat Operator컴공지식/컴퓨터비전 2024. 9. 9. 16:50
ROI(Region of Interest)에 대해 알아보자
ROI 란 이미지에서 우리가 관심 있는 특정 부분을 선택하는 거다.
마치 잘라내기다.
다음은 ROI를 이용하는 코드다.
int main() {
Mat image = imread("lena.png"); // 이미지를 불러오는 부분
Rect rect(100, 30, 250, 300); // ROI 영역을 정의하는 사각형(x, y, 너비, 높이)
Mat rect_roi = image(rect); // 이미지를 해당 ROI 부분만 자른다
imshow("rectROI", rect_roi); // 자른 부분을 화면에 보여준다
waitKey(0); // 키 입력을 기다리면서 창을 유지
}여기서 Rect 클래스가 나오는데
Rect 클래스는 다음과 같이 쓴다.
Rect(x, y, width, height)
x, y는 왼쪽 위 모서리의 좌표다
width와 height는 너비와 높이다.
자, 이번에는 이미지 덧셈과 뺄셈을 알아보자
다음 코드를 살펴보자
int main() {
Mat img1 = imread("lena.png"); // 첫 번째 이미지 불러오기
Mat img2 = imread("lena.png"); // 두 번째 이미지 불러오기 (여기서는 같은 이미지 사용)
Mat dst; // 결과를 저장할 변수
add(img1, img2, dst); // img1과 img2를 더해서 dst에 저장
imshow("dst", dst); // 결과 이미지를 보여줌
waitKey(0); // 키 입력 대기 (결과 창 유지)
}이 코드는 두 이미지를 더하는 거라서, 결과 이미지의 픽셀이 원래 이미지보다 더 밝아진다.
이 처럼 함수를 이용해 이미지를 더하거나 뺄 수 있는데 이에 관련된 코드 몇 가지를 소개하겠다.
scaleAdd(Mat src1, double scale, Mat src2, Mat dst)
이 함수는 src1 이미지를 scale 배만큼 곱하고, src2 이미지를 더해서 dst에 결과를 저장하는 함수다.
scale * src1(I) + src2(I) 인거다.
absdiff(Mat src1, Mat src2, Mat dst)
이 함수는 두 이미지의 절대 차이를 계산해서 dst에 저장하는 거다. abs가 절대값이라는 뜻이다.
saturate(|src1(I) - src2(I)|) 이다.
saturate는 픽셀값을 0에서 255 사이로 제한해주는 거다.
만약 픽셀 값이 255보다 크면 그냥 255로
0보다 작으면 0으로 만들어준다.
subtract(Mat src1, Mat src2, Mat dst, Mat mask=noArray(), int dtype=-1)
이 함수는 src1에서 src2를 빼서 dst에 저장한다. 마스크가 있으면 특정 부분만 연산할 수 있다.
saturate(src1(I) - src2(I)) (마스크가 있으면 그 부분만 계산)
이미지에서 특정 효과를 제거하거나, 이미지 간의 차이를 뺄 때 유용하게 쓸 수 있다.
'컴공지식 > 컴퓨터비전' 카테고리의 다른 글
Color Models (0) 2024.09.19 기본 색 (0) 2024.09.19 VideoWriter (0) 2024.09.09 OpenCV로 도형 그리기 (0) 2024.09.09 히스토그램이란? (0) 2024.09.08