「cv::Scalar」型を返す「myClass」というクラスがあり、これを実行したいと考えています。
cv::Scalar myValue;
for ( myValue > myClass (i,j) )
....
しかし、「for」行の比較部分では、「これらのオペランドに一致する演算子 > はありません」というエラーが発生します。誰かが私を助けることができますか?ありがとうございました。
「cv::Scalar」型を返す「myClass」というクラスがあり、これを実行したいと考えています。
cv::Scalar myValue;
for ( myValue > myClass (i,j) )
....
しかし、「for」行の比較部分では、「これらのオペランドに一致する演算子 > はありません」というエラーが発生します。誰かが私を助けることができますか?ありがとうございました。
Zhi Lu の回答を完成させるには:
Scalar の要素を比較したい場合は、次のようにする必要があります。
cv::Scalar scalar(myValue); //here you assign a value to the element (0,0)
for (scalar.val[0,0] > myClass (i,j)) // access the elment of Scalar
{
}
とにかく、単一の値が必要な場合は、Scalar を使用しても意味がありません。また、次のような適切な for ループ式が必要なことにも注意してください。
for(i = 0; i < 0; i++){}
Scalar は、4 つの倍精度型要素の配列です。このような構造体には、任意の数の要素 (double 型) を格納できます。そのため、int 型のインスタンスのように、Scalar のインスタンスを別のインスタンスと直接比較することはできません。
2 つの要素を比較する演算子がない場合は、次のcv::Scalar
ように定義できます。
#include "OpenCVStuff.h"
// Custom operator to compare cv::Scalar class...
bool operator >(const cv::Scalar &a, const cv::Scalar &b)
{
bool Result = false;
// Do whatever you think a Scalar comparison must be.
return Result;
}
int main(int argc, char **argv)
{
cv::Scalar myValue;
// Assuming myClass (i,j) returns a cv::Scalar
for ( myValue > myClass (i,j) )
{
// Do something...
}
return 0;
}
これを行うと、クラス自体cv::Scalar
を気にせずに 2 つの比較方法を定義できます。cv::Scalar
例としてに入れましたmain.cpp
が、比較が実行される場所が見える限り、演算子を好きな場所に定義できます。