관심영역 (ROI)
관심 영역 ROI는 Region Of Interest로 의미 그대로 이미지 내부의 관심있는 영역을 의미한다.
사각형 형태의 관심 영역 지정하기
Mat A = imread("lenna.jpg", IMREAD_COLOR); Rect r(10, 10, 100, 100); // x1, y1, width, height Mat D = A(r); // Shallow Copy(얕은 복사, 공유)
관심 영역 black으로 변환
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { Mat A; A = imread("lenna.jpg", IMREAD_COLOR); if (A.empty()) { cout << " no image" << endl; return -1; } Rect r(10, 10, 100, 100); Mat D = A(r); // A의 r부분을 D가 pointing (얕은 복사) D = Scalar(0, 0, 0); // 관심 영역의 모든 화소가 (0, 0, 0)이 된다. imshow("src", A); waitKey(); return 0; }
실행 결과
Code
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { double data[] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.0, 9.9, 10, 11, 12 }; Mat m1(3, 4, CV_64F, data); Mat m2 = m1.clone(); // 새로운 행렬 반환 Mat m3, m4; m1.copyTo(m3); // 행렬을 parameter로 들어온 행렬에 복사 m1.convertTo(m4, CV_8U); // 데이터 타입 변경 cout << "[m1] = " << m1 << "\n\n"; cout << "[m2] = " << m2 << "\n\n"; cout << "[m3] = " << m3 << "\n\n"; cout << "[m4] = " << m4 << "\n\n"; // m3의 데이터 변화는 m1에게 미치지 않는다. (Deep Copy) m3 = 1.1; cout << "[m1] = " << m1 << "\n\n"; cout << "[m3] = " << m3 << "\n\n"; waitKey(); return 0; }
실행 화면
오른쪽 하단에 로고 삽입
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { Mat A = imread("sea.jpg", IMREAD_COLOR); Mat B = imread("logo.jpg", IMREAD_COLOR); // (widthA - widthB, heightA - heightB) 위치에서 // widthB, heightB의 직사각형을 관심영역으로 Rect R(A.cols - B.cols, A.rows - B.rows, B.cols, B.rows); Mat roi(A, R); B.copyTo(roi); imshow("sea & logo", A); waitKey(); return 0; }
참고
Mat A = imread("lenna.jpg", IMREAD_COLOR); Mat roi(A, Rect(10, 10, 2, 2)); cout << "[roi] = \n" << roi << "\n"; // (10, 10)위치의 B, G, R 값 , (10, 11)위치의 B, G, R 값 // (10, 11)위치의 B, G, R 값 , (11, 11)위치의 B, G, R 값 을 출력한다.
실행 화면
Mat src = imread(""lenna.jpg"); Mat dst; resize(std, dst, Size(100, 100)); imshow("smallImage", dst);
실행 화면
lenna.jpg (400 x 400)
sea.jpg (509 x 339)
logo.jpg (80 x 40)