質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1468閲覧

MInAreaRectの返す角度

tanjiiya

総合スコア2

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2022/01/18 11:31

編集2022/01/18 11:35

https://stackoverflow.com/questions/15956124/minarearect-angles-unsure-about-the-angle-returned
上のURLにあるプログラムでは0度から90度の範囲で10度ずつ与えながら、長方形が回転していきます。これを下のコメントにあるように0度から180度の範囲で10度ずつ与えるようにしたいと考え、コメントにある使用するコードを入れたのですが、結果が変わらなかったり、エラーを吐いてしまいます。そのため、使用するコードをどこに入れたら良いのか教えてほしいです。
0~90度の範囲のプログラムのもの↓
#define _CRT_SECURE_NO_WARNINGS

/-------------- ヘッダファイル ----------------/
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

//CP2110/4 HID USB-to-UART インターフェースライブラリのインクルードファイル
#include <SLABCP2110.h>
#include <SLABHIDtoUART.h>
#include <CP2114_Common.h>

//CP2110/4 HID USB-to-UART インターフェースライブラリ へのリンク
#pragma comment(lib,"SLABHIDtoUART.LIB")
#pragma comment(lib,"winmm.LIB")

/OpenCV用------------------------------------------------------------------------/

#include<math.h>
#include<stdio.h>
#include<vector>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>

#include<iostream>
// OpenCV includes
#include <opencv2/opencv.hpp>
#include<opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv/cv.h>

using namespace cv;
using namespace std;
#pragma warning(disable:4996)

/*#include <stdio.h>

#include <opencv\cv.h>
#include <opencv\highgui.h>

using namespace cv;*/

int main() {
float angle = 0;
Mat image(200, 400, CV_8UC3, Scalar(0));
RotatedRect originalRect;
Point2f vertices[4];
vector<Point2f> vertVect;
RotatedRect calculatedRect;

while (waitKey(5000) != 27) { // 長方形を作成し、毎回10度ずつ回転させます。 originalRect = RotatedRect(Point2f(100, 100), Size2f(100, 50), angle); // minAreaRectが使用できるように、長方形を点のベクトルに変換します。 // 同じ場所で また、ポイントを右に移動して、2つの長方形が動かないようにします。 originalRect.points(vertices); for (int i = 0; i < 4; i++) { vertVect.push_back(vertices[i] + Point2f(200, 0)); } // Get minAreaRect to find a rectangle that encloses the points. minAreaRectを取得して、ポイントを囲む長方形を見つけます。 // This should have the exact same orientation as our original rectangle.これは、元の長方形とまったく同じ向きである必要があります。 calculatedRect = minAreaRect(vertVect); // Draw the original rectangle, and the one given by minAreaRect.元の長方形と、minAreaRectで指定された長方形を描画します。 for (int i = 0; i < 4; i++) { line(image, vertices[i], vertices[(i + 1) % 4], Scalar(0, 255, 0)); line(image, vertVect[i], vertVect[(i + 1) % 4], Scalar(255, 0, 0)); } imshow("rectangles", image); // Print the angle values. 角度の値を出力します。 printf("---\n"); printf("Original angle: %7.2f\n", angle); printf("Angle given by minAreaRect: %7.2f\n", calculatedRect.angle); printf("---\n"); // Reset everything for the next frame.//次のフレームのためにすべてをリセットします。 image = Mat(200, 400, CV_8UC3, Scalar(0)); vertVect.clear(); angle += 10; } return 0;

}

使用したいコード
一つ目
void printAngle(RotatedRect calculatedRect){
if(calculatedRect.size.width < calculatedRect.size.height){
printf("Angle along longer side: %7.2f\n", calculatedRect.angle+180);
}else{
printf("Angle along longer side: %7.2f\n", calculatedRect.angle+90);
}
}

二つ目
printf("Angle given by minAreaRect: %7.2f\n", calculatedRect.angle);
printAngle(calculatedRect);
printf("---\n");

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

どのようにコードを切り貼りするかよりもそのコードの内容を理解すべきだとは思いますが、主題である「挿入する位置」はコードから自ずと分かるはずです。
1つ目は関数定義ですし、2つ目に関しては上下の行が既存の行です。

また、リンク先 では [-90, 0) の範囲が前提となっていますが、それは考慮していますか?

そして OpenCV 公式ドキュメント には minAreaRect によって返される RotatedRect の回転角の範囲について情報がありませんし、どうやら OpenCV のバージョンによって実際の範囲も違うようなので、決まった規則があるとは考えない方が良いと思われます。

投稿2022/01/19 01:58

yaito3014

総合スコア176

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問