C ++ / Opencv使用されているデータ型を理解する

ポース

OpenCVを学び、プロジェクトの1つでナンバープレート検出システムに使用したいと思っています。私は概説されたステップに従ってきました:

https://github.com/MicrocontrollersAndMore/OpenCV_3_License_Plate_Recognition_Cpp

問題は、クラスが存在PossibleChar.hすることです。これが使用しているデータ型について頭を悩ませているようには見えません。ガイドラインに準拠していないため、アルゴリズム内でクラスを使用したくありませんが、シーン内のナンバープレートを検出するためのアルゴリズムを実行する必要があります。クラスは次のようになります。

// PossibleChar.h

#ifndef POSSIBLE_CHAR_H
#define POSSIBLE_CHAR_H

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>

class PossibleChar {
public:
    // member variables
    std::vector<cv::Point> contour;

    cv::Rect boundingRect;

    int intCenterX;
    int intCenterY;

    double dblDiagonalSize;
    double dblAspectRatio;

    static bool sortCharsLeftToRight(const PossibleChar &pcLeft, const PossibleChar & pcRight) {
        return(pcLeft.intCenterX < pcRight.intCenterX);
    }


    bool operator == (const PossibleChar& otherPossibleChar) const {
        if (this->contour == otherPossibleChar.contour) return true;
        else return false;
    }


    bool operator != (const PossibleChar& otherPossibleChar) const {
        if (this->contour != otherPossibleChar.contour) return true;
        else return false;
    }

    // function prototypes
    PossibleChar(std::vector<cv::Point> _contour);

};

#endif  // POSSIBLE_CHAR_H

PossibleChar.cpp

PossibleChar::PossibleChar(std::vector<cv::Point> _contour) {
    contour = _contour;

    boundingRect = cv::boundingRect(contour);

    intCenterX = (boundingRect.x + boundingRect.x + boundingRect.width) / 2;
    intCenterY = (boundingRect.y + boundingRect.y + boundingRect.height) / 2;

    dblDiagonalSize = sqrt(pow(boundingRect.width, 2) + pow(boundingRect.height, 2));

    dblAspectRatio = (float)boundingRect.width / (float)boundingRect.height;
}

私の最初の考えは、このクラスが行っているのは私cv::Point与えることだけだということでした。これは、ナンバープレートの「キャラクター」間の距離の計算に移るまではうまくいきました。これは、アルゴリズムで指定された関数です。

double distanceBetweenChars(const PossibleChar &firstChar, const PossibleChar &secondChar) {
    int intX = abs(firstChar.intCenterX - secondChar.intCenterX);
    int intY = abs(firstChar.intCenterY - secondChar.intCenterY);

    return(sqrt(pow(intX, 2) + pow(intY, 2)));
}

使用せずに使用した場合PossibleChar

double distanceBetweenChars(const cv::Point &firstChar, const cv::Point &secondChar) {

  cv::Rect boundingRect;

  boundingRect = cv::boundingRect(firstChar);

}

エラーが発生し続けます:

error: no viable conversion from 'const cv::Point' (aka 'const Point_<int>') to 'const cv::_InputArray'

したがって、このクラスは単に返すだけでなく、cv::point何か他のことをしていると私は信じるようになります。どうすればこれを回避して距離を計算できるかについてのアイデアはありますか?

ミキ

APossibleCharはではありませんcv::Pointこれは、可能な文字の情報を含むクラスです。これをblobと呼びましょう

  • std::vector<cv::Point> contour; ブロブの輪郭
  • cv::Rect boundingRect; ブロブのバウンディングボックス(軸揃え)
  • int intCenterX; int intCenterY;の中心の座標 bounding box
  • double dblDiagonalSize; double dblAspectRatio; サイズとアスペクト比 bounding box

ご覧のとおり、これはではありませんが、特定のブロブの形状範囲Pointに関する情報が含まれていますこれは文字である可能性があります

関数:

double distanceBetweenChars(const PossibleChar &firstChar, const PossibleChar &secondChar)

2つの可能な文字の中心間のユークリッド距離を示します。で作業したい場合はcv::Point、次のことができます。

double distanceBetweenChars(const cv::Point &firstChar, const cv::Point &secondChar) {
  return cv::norm(firstChar - secondChar);
}

これは、前と同じように、2点間のユークリッド距離を返します。


(パイプラインで役立つ場合があります)PossibleCharとして記述したい場合cv::Pointは、中心の座標を考慮することができます。

cv::Point getPointFromPossibleChar(const PossibleChar& pc) {
    return cv::Point(pc.intCenterX, pc.intCenterY);
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C ++をリンクするExcelエラー:「数式で使用されている値のデータ型が間違っています」

分類Dev

データ型がcで混同されている

分類Dev

データ型がcで混同されている

分類Dev

列挙型データ型が常にcのmain()から宣言されているのはなぜですか?

分類Dev

C ++さまざまなデータ型を使用する関数を作成する

分類Dev

Numpyを使用してC ++データ型で生成されたバイナリファイルを読み取る

分類Dev

変数名にはどのデータ型が使用されていますか?また、割り当てを複数の変数にショートカットするにはどうすればよいですか?C ++

分類Dev

パラメータで使用されているC変数を解放する方法

分類Dev

「int」という単語をCのデータ型ではなく文字列として使用するにはどうすればよいですか?

分類Dev

Tensorflowのc ++ APIで複素数データ型を使用するにはどうすればよいですか?

分類Dev

uint64_tデータ型を使用してCでビットマップ配列を実装するにはどうすればよいですか?

分類Dev

10進数のデータ型を使用してC#で同じ計算を行うと、BigNumber.jsの計算で異なる値が表示されます

分類Dev

Driver.c controlFunctionでDeviceIoControlを使用して送信されたデータを受信するにはどうすればよいですか?IOCTL、ドライバー

分類Dev

Cデータ型はどのように「ほとんどのコンピューターで直接サポートされている」のですか?

分類Dev

すでにデータが追加されているリストの初期値を挿入する方法、mvc、c#

分類Dev

C#でtable.Rows.countを使用すると、データベースが接続されていないと思います

分類Dev

返されるデータ型の前に、C関数プロトタイプに構造名を追加する

分類Dev

C ++ポインタとデータ型の初期化を理解しようとしています

分類Dev

C ++用の適切なxmlデータ型を使用する

分類Dev

ソートされていない一意のデータC ++を生成する

分類Dev

C#を使用してSQLデータにデータを追加する際の「プロシージャは指定されていないパラメータを予期しています」エラー

分類Dev

C ++の小さいデータ型とすべて大文字のデータ型

分類Dev

Cとは異なり、Javaのデータ型サイズが固定されている理由

分類Dev

Cでのこれらの異なる型宣言をよりよく理解するのに役立つ例を教えてください。

分類Dev

すべてのCデータ型のサイズはバイトの整数倍であることが保証されていますか?

分類Dev

画像を取得し、データベースc#に保存されている画像パスを使用して画像ボックスに表示します

分類Dev

Cで変数として使用されるファイルからデータを抽出する方法

分類Dev

C ++共用体は、それに格納されている型と、呼び出すデストラクタをどのように認識しますか?

分類Dev

二重データ型C ++を使用するようにKiss_fftをコンパイルするにはどうすればよいですか?

Related 関連記事

  1. 1

    C ++をリンクするExcelエラー:「数式で使用されている値のデータ型が間違っています」

  2. 2

    データ型がcで混同されている

  3. 3

    データ型がcで混同されている

  4. 4

    列挙型データ型が常にcのmain()から宣言されているのはなぜですか?

  5. 5

    C ++さまざまなデータ型を使用する関数を作成する

  6. 6

    Numpyを使用してC ++データ型で生成されたバイナリファイルを読み取る

  7. 7

    変数名にはどのデータ型が使用されていますか?また、割り当てを複数の変数にショートカットするにはどうすればよいですか?C ++

  8. 8

    パラメータで使用されているC変数を解放する方法

  9. 9

    「int」という単語をCのデータ型ではなく文字列として使用するにはどうすればよいですか?

  10. 10

    Tensorflowのc ++ APIで複素数データ型を使用するにはどうすればよいですか?

  11. 11

    uint64_tデータ型を使用してCでビットマップ配列を実装するにはどうすればよいですか?

  12. 12

    10進数のデータ型を使用してC#で同じ計算を行うと、BigNumber.jsの計算で異なる値が表示されます

  13. 13

    Driver.c controlFunctionでDeviceIoControlを使用して送信されたデータを受信するにはどうすればよいですか?IOCTL、ドライバー

  14. 14

    Cデータ型はどのように「ほとんどのコンピューターで直接サポートされている」のですか?

  15. 15

    すでにデータが追加されているリストの初期値を挿入する方法、mvc、c#

  16. 16

    C#でtable.Rows.countを使用すると、データベースが接続されていないと思います

  17. 17

    返されるデータ型の前に、C関数プロトタイプに構造名を追加する

  18. 18

    C ++ポインタとデータ型の初期化を理解しようとしています

  19. 19

    C ++用の適切なxmlデータ型を使用する

  20. 20

    ソートされていない一意のデータC ++を生成する

  21. 21

    C#を使用してSQLデータにデータを追加する際の「プロシージャは指定されていないパラメータを予期しています」エラー

  22. 22

    C ++の小さいデータ型とすべて大文字のデータ型

  23. 23

    Cとは異なり、Javaのデータ型サイズが固定されている理由

  24. 24

    Cでのこれらの異なる型宣言をよりよく理解するのに役立つ例を教えてください。

  25. 25

    すべてのCデータ型のサイズはバイトの整数倍であることが保証されていますか?

  26. 26

    画像を取得し、データベースc#に保存されている画像パスを使用して画像ボックスに表示します

  27. 27

    Cで変数として使用されるファイルからデータを抽出する方法

  28. 28

    C ++共用体は、それに格納されている型と、呼び出すデストラクタをどのように認識しますか?

  29. 29

    二重データ型C ++を使用するようにKiss_fftをコンパイルするにはどうすればよいですか?

ホットタグ

アーカイブ