[Reference Site]
(1) 두 좌표를 이용한 사각형 범위
cv::Rect(Point(x1, y1), Point(x2, y2));
(2) x, y 좌표에서부터 width 와 height 까지의 사각형 범위
cv::Rect(x, y, width, height);
Draw Rectangle
cv::rectangle(img, cv::Rect, cv::Scalar(b,g,r), thickness, lineType, shift);
lineType 부분에 filled 를 넣기 위해서는 다음과 같이 thickness에 넣어주어야 한다!
cv::rectangle(img, cv::Rect, cv::Scalar(b,g,r), cv::FILLED, 8, shift);
(1) Initialize two box
cv::Rect r1(x1, y1, width1, height1);
cv::Rect r2(x2, y2, width2, height2);
(2) Intersection
cv::Rect r3 = r1 & r2;
(3) Union
cv::Rect r3 = r1 | r2;
[Example Code]
#include <iostream>
#include <fstream>
// stitching related
#include "opencv2/imgcodecs/imgcodecs.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/stitching.hpp"
int main()
{
// Road images
cv::Mat left = cv::imread("/home/sj/iros2022/image/left.jpg", 1);
// Check image read correctly
if(left.cols != 0)
std::cout << "Correctly read left image !!" << std::endl;
// Combine three images in one vector
std::vector<cv::Mat> imgs;
imgs.push_back(left);
// Add Masking
cv::Rect left_rect(int(left.cols/2), 0, int(left.cols/2) , left.rows);
cv::Rect right_rect(0, 0, int(right.cols/2), right.rows);
std::cout << "Left image size1 : " << left.size() << std::endl;
// Left image size1 : [4032 x 1908]
std::cout << "Left image size2 : " << left.rows << ", " << left.cols << std::endl;
// Left image size2 : 1908, 4032
Std::cout << "Left image left_top points : " << int(left.rows * 3 / 4) << ", " << int(left.cols / 2) << std::endl;
// Left center Points : 1431, 2016
std::cout << "Left Mask : " << left_rect << std::endl;
// Left Mask : [954 x 4032 from (1431, 2016)]
std::cout << "Left Rect area : " << left_rect.area() << std::endl;
// Left Rect area : 3846528
cv::Mat copy_left = left.clone();
cv::Mat left_mask_img = copy_left(left_rect);
cv::imshow("Left Rect", left_mask_img);
cv::waitKey(100);
cv::Mat copy_right = left.clone();
cv::Mat right_mask_img = copy_right(right_rect);
cv::imshow("Right Rect", right_mask_img);
cv::waitKey(100);
return 0;
}
C++을 사용하였고 3개의 라이브러리를 포함하고 있으므로 stitching 이라는 이름을 가진 exeutive file을 만들어줌
g++ stitching.cpp -L/usr/local/include/opencv2 -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_core -lopencv_stitching -o stitching
해당 파일에 다음과 같이 작성해주면 컴파일한 코드를 빌드 및 실행
# Example of current path: /home/sj/iros2022/src/Stitching
./stitching