지난 글에서는 ROI 영역 밖의 부분을 0으로 처리하는 방법으로 ROI를 지정했다. 그러나, 이렇게 하면 바깥 부분의 데이터는 의미를 잃었지만 여전히 프레임의 크기는 원본과 같다.
일반적으로 프레임을 가지고 연산을 할 때, 모든 픽셀을 순회하는 경우가 대부분이므로 ROI 영역 밖을 0으로 처리하게 되면 ROI 바깥 영역 또한 연산에 포함이 된다. 따라서 ROI 영역이 사각형인 경우, Rect나 Range를 통해 직접 범위를 좁혀주면 불필요한 픽셀을 보지 않게 되어 효율적이다.
Mat roi1 = frame.(Range(ROI_X1, ROI_X2), Range(ROI_Y2, ROI_Y2));
Mat roi2 = frame.(Rect(ROI_X, ROI_Y, ROI_WIDTH, ROI_HEIGHT));
이렇게 선언된 roi는 원본 frame과 값을 공유하므로 원본이 따로 필요하다면 clone으로 복제해두어야 한다.
실제로 대부분의 연산 속도 또한 전체 프레임의 영역 대비 ROI 영역 만큼 줄어드는 것을 관찰할 수 있었다.