Visual Studio 2013 Express
 Visual C++( アンマネージドコード )
 OpenCV 3.1

■269.OpenCV 点群に外接する傾いていない矩形を取得 Prev Top Next
関連ページ:

今回は点群に外接する傾いていない矩形を取得します。


---main.cpp---

#include <time.h>
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>

#pragma comment( lib, "opencv_world300d.lib" )

int main(int argc, const char* argv[])
{
   int hr = -1;

   try
   {
      cv::Mat src;

      // 画像領域を確保
      src = cv::Mat::zeros(cvSize(512, 384), CV_8UC1);

      // 点の座標領域を確保
      std::vector<cv::Point> points;

      srand((unsigned)time(nullptr));
      
      for (int i = src.rows * 0.25; i < src.rows * 0.75; i++)
      {
         for (int j = src.cols * 0.25; j < src.cols * 0.75; j++)
         {
            // 画像の中心から各ピクセルまでの距離
            // 0除算で実行時エラーにならないようにするため + 1
            double len = sqrt(pow(src.rows * 0.5 - i, 2) + pow(src.cols * 0.5 - j, 2)) * 10.0 + 1;

            // 点を描画するかを乱数で判定
            if (rand() % (int)len == 0)
            {
               // 点を描画
               cv::circle(src, cv::Point(j, i), 2, cv::Scalar(255), -1, cv::LINE_AA);
               
               // 点を描画した座標を格納
               points.push_back(cv::Point(j, i));
            }
         }
      }

      // 点群に外接する傾いていない矩形を取得
      cv::Rect rc = cv::boundingRect(points);

      std::cout << rc.x << ":" << rc.width << ":" << rc.y << ":" << rc.height << std::endl;
      
      // 矩形描画
      cv::rectangle(src, cv::Point(rc.x, rc.y), cv::Point(rc.x + rc.width, rc.y + rc.height), cv::Scalar( 128 ), 1);

      cv::namedWindow("Source", 1);
      cv::imshow("Source", src);

      cv::waitKey(0);

      hr = 0;
   }

   catch (cv::Exception ex)
   {
      std::cout << ex.err << std::endl;
   }

   // ウィンドウの破棄
   cv::destroyAllWindows();

   return hr;
}

点群に外接する傾いていない矩形


Prev Top Next
inserted by FC2 system