Advertisement
jack06215

[OpenCV] my utils

Jul 8th, 2020
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.01 KB | None | 0 0
  1. cv::Rect2d selectROI(const std::string &video_name, const cv::Mat &frame)
  2. {
  3.     cv::namedWindow(video_name, cv::WINDOW_NORMAL);
  4.     cv::resizeWindow(video_name, frame.cols, frame.rows);
  5.     struct Data
  6.     {
  7.         cv::Point center;
  8.         cv::Rect2d box;
  9.  
  10.         static void mouseHandler(int event, int x, int y, int flags, void *param)
  11.         {
  12.             Data *data = (Data*)param;
  13.             switch (event)
  14.             {
  15.                 // start to select the bounding box
  16.             case cv::EVENT_LBUTTONDOWN:
  17.                 data->box = cvRect(x, y, 0, 0);
  18.                 data->center = cv::Point2f((float)x, (float)y);
  19.                 break;
  20.                 // update the selected bounding box
  21.             case cv::EVENT_MOUSEMOVE:
  22.                 if (flags == 1)
  23.                 {
  24.                     data->box.width = 2 * (x - data->center.x);
  25.                     data->box.height = 2 * (y - data->center.y);
  26.                     data->box.x = data->center.x - data->box.width / 2.0;
  27.                     data->box.y = data->center.y - data->box.height / 2.0;
  28.                 }
  29.                 break;
  30.                 // cleaning up the selected bounding box
  31.             case cv::EVENT_LBUTTONUP:
  32.                 if (data->box.width < 0)
  33.                 {
  34.                     data->box.x += data->box.width;
  35.                     data->box.width *= -1;
  36.                 }
  37.                 if (data->box.height < 0)
  38.                 {
  39.                     data->box.y += data->box.height;
  40.                     data->box.height *= -1;
  41.                 }
  42.                 break;
  43.             }
  44.         }
  45.     } data;
  46.  
  47.     cv::setMouseCallback(video_name, Data::mouseHandler, &data);
  48.  
  49.     while (cv::waitKey(1) < 0)
  50.     {
  51.         cv::Mat draw = frame.clone();
  52.         rectangle(draw, data.box, cv::Scalar(255, 0, 0), 2, 1);
  53.         cv::imshow(video_name, draw);
  54.     }
  55.     cv::destroyWindow(video_name);
  56.     return data.box;
  57. }
  58.  
  59.  
  60. void toGray(const cv::Mat &frame, cv::Mat &gray)
  61. {
  62.     if (frame.channels() > 1)
  63.         cv::cvtColor(frame, gray, CV_BGR2GRAY);
  64.     else
  65.         frame.copyTo(gray);
  66. }
  67.  
  68. void toRGB(const cv::Mat &frame, cv::Mat &rgb)
  69. {
  70.     if (frame.channels() == 1)
  71.         cv::cvtColor(frame, rgb, CV_GRAY2RGB);
  72.     else
  73.         frame.copyTo(rgb);
  74. }
  75.  
  76. void drawBoundingBox(cv::Mat image, std::vector<cv::Point2f> bb, cv::Scalar colour)
  77. {
  78.     for (unsigned i = 0; i < bb.size() - 1; i++) {
  79.         line(image, bb[i], bb[i + 1], colour, 2);
  80.     }
  81.     line(image, bb[bb.size() - 1], bb[0], colour, 2);
  82. }
  83.  
  84. void drawDot(cv::Mat image, std::vector<cv::Point2f> bb, cv::Scalar colour)
  85. {
  86.     for (unsigned i = 0; i < bb.size() - 1; i++)
  87.     {
  88.         //line(image, bb[i], bb[i + 1], colour, 2);
  89.         cv::circle(image, bb[i], 2, colour, 2);
  90.     }
  91.     cv::circle(image, bb[bb.size() - 1], 2, colour, 2);
  92. }
  93.  
  94.  
  95.  
  96. std::vector<cv::Point2f> Points(std::vector<cv::KeyPoint> keypoints)
  97. {
  98.     std::vector<cv::Point2f> res;
  99.     for (unsigned i = 0; i < keypoints.size(); i++) {
  100.         res.push_back(keypoints[i].pt);
  101.     }
  102.     return res;
  103. }
  104.  
  105. std::string paddingZeros(int num, int max_zeros)
  106. {
  107.     std::ostringstream ss;
  108.     ss << std::setw(max_zeros) << std::setfill('0') << num;
  109.     return ss.str();
  110. }
  111.  
  112. std::string cv_makeFilename(std::string path_pattern, int index, cv_FileSuffix format)
  113. {
  114.     std::string format_1 = "";
  115.     switch (format)
  116.     {
  117.     case JPEG:  format_1 += ".jpeg";
  118.     case PNG:   format_1 += ".png";
  119.     default:    format_1 += " ";
  120.     }
  121.     std::string save_index = paddingZeros(index + 1, 4);
  122.     return (path_pattern + save_index + format_1);
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement