この単純な関数では、RGB情報で構成される値をintからopencvScalarに変換します。
Scalar IntToScalarColour(int i){
//Scalar scal((int)(i & 0x000000FF),(int)(i & 0x0000FF00),(int)(i & 0x00FF0000));
int b = i & 0x000000FF;
int g = i & 0x0000FF00;
int r = i & 0x00FF0000;
Scalar scal(b,g,r);
return scal;
}
しかし、デバッグでは、scalの値が正しくないことがわかります。なにが問題ですか?
UPD。オープンCVではスカラーは
template<typename _Tp> class Scalar_ : public Vec<_Tp, 4>
{
public:
//! various constructors
Scalar_();
Scalar_(_Tp v0, _Tp v1, _Tp v2=0, _Tp v3=0);
Scalar_(const CvScalar& s);
Scalar_(_Tp v0);
//! returns a scalar with all elements set to v0
static Scalar_<_Tp> all(_Tp v0);
//! conversion to the old-style CvScalar
operator CvScalar() const;
//! conversion to another data type
template<typename T2> operator Scalar_<T2>() const;
//! per-element product
Scalar_<_Tp> mul(const Scalar_<_Tp>& t, double scale=1 ) const;
// returns (v0, -v1, -v2, -v3)
Scalar_<_Tp> conj() const;
// returns true iff v1 == v2 == v3 == 0
bool isReal() const;
};
typedef Scalar_<double> Scalar;
そして
typedef struct CvScalar
{
double val[4];
}
CvScalar;
何か案は?
値を8ビットに戻すのを忘れた(したがってオーバーフロー):
Scalar IntToScalarColour(int i){
//Scalar scal((int)(i & 0x000000FF),(int)(i & 0x0000FF00),(int)(i & 0x00FF0000));
uchar b = (i & 0x000000FF);
uchar g = (i & 0x0000FF00) >> 8;
uchar r = (i & 0x00FF0000) >> 16;
Scalar scal(b,g,r);
return scal;
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加