タイトルが示唆するように、OpenCVのmouseCallback関数をクラスベースのC++構造体で実装する際に問題があります。私に説明させてください。私はBriskMatchingというクラスを定義しました。このクラスでは、OpenCVが必要とする正しいパラメータでmouseCallbackという名前のメンバ関数を作成しました(下記のコードをご覧ください)。私はOpenCVののcv::setMouseCallback
機能によって指定されたマウスのコールバック関数として、この機能を設定しようとするOpenCVのmouseCallback関数のクラスベースの実装を作成するのに問題がある
**Briskmatching.h**
class BriskMatching
{
public:
BriskMatching();
~BriskMatching();
public:
void mouseCallback(int event, int x, int y, int flags, void *param);
};
これは、すべての罰金ですが、しかし、私の問題が発生します。私の主な機能には
、私はbriskMatcherと呼ばれるBriskMatchingクラスのインスタンスを作成し、それは私がそうのようにそれを行うにしようとするマウスのコールバックを設定するための時間が来るとき...
cv::setMouseCallback("Matches", BriskMatching::mouseCallback, &matchesImg);
残念ながら、これはスローエラー。
Error 3 error C3867: 'BriskMatching::mouseCallback': function call missing argument list; use '&BriskMatching::mouseCallback' to create a pointer to member c:\users\mobilef\documents\visual studio 2010\projects\opencv_objtracking\opencv_briskmatching\main.cpp 54 1 OpenCV_BriskMatching
私はBriskMatching.h
にstatic
ようmouseCallback関数を宣言することで、このエラーを取り除くことができますが、私はmouseCallback機能の多くの非静的メンバ変数を参照するので、私は他のエラーの全体の強打を取得します。
あなたに私の質問はこれです。 BriskMatchingクラス内で宣言されたmouseCallback関数をcv::setMouseCallback
関数に正しく渡すために、コードをどのように変更する必要がありますか?
アドバイスをいただきありがとうございます。
完璧、ありがとう!それは素晴らしいですが、私はそれの背後にあるロジックやその仕組みを完全に理解していません。私は数年前からC++でコーディングしてきましたが、タイプキャストは避けていました。私は今それらを読んで行くつもりです、そして、これがどのように働くかを理解しようとします。 – szakeri