1. ホーム
  2. OpenCV

OpenCV - 長方形の境界 cv::boundingRect

2022-03-01 12:12:59

著者 スティーブン・ザイ ティエンバオ
著作権について 著作権は著者に帰属します。商業的な複製は著者に許可を得てください。非商業的な複製は出典を明記してください 

機能プロトタイプ

cv::Rect boundingRect( InputArray array );

パラメータの説明

入力: InputArray 型の配列、入力グレイスケール画像または 2 次元点セット。

出力: Rect 型の矩形情報(矩形のサイズと位置を含む).

テストコード

#include <iostream>
#include <time.h>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main()
{
	cv::Mat src = imread("test.png",0);
	cv::Mat result = src.clone();
	cv::Mat th1;
	// Maximum inter-class difference method, also known as Otsu's algorithm
	threshold(result, th1, 0, 255, THRESH_OTSU);
	// Inverse the phase
	th1 = 255 - th1;
	// determine the contour of the connected area
	std::vector<std::vector<cv::Point> > contours; // create contour container
	std::vector<cv::Vec4i> hierarchy;
	cv::findContours(th1, contours, hierarchy, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE, cv::Point());
	// Iterate over the outline to display the rectangular box
	for (int i = 0; i < contours.size(); ++i)
	{
		cv::Rect rect = cv::boundingRect(cv::Mat(contours[i]));
		cv::rectangle(result, rect, Scalar(255), 1);
	}

	imshow("original", src);
	imshow("thresh", th1);
	imshow("result", result);
	waitKey(0);

	return 0;
}



テスト結果

図1 グレイスケールの原画
<図
図2 閾値マップ
<図
図3 接続領域の矩形ボックスの効果

       もう一つ、同じく最小の囲み矩形を取得する関数minAreaRectがありますが、こちらは傾斜角度を指定したもので、後日取り上げます。

       もしこの記事が役に立ったなら、「いいね!」で教えてくれたら嬉しいです〜!乾杯