c++ - opencv标量中的错误值

标签 c++ opencv

在这个简单的函数中,我将包含 RGB 信息的值从 int 转换为 opencv Scalar。

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 中的值不正确。怎么了?

enter image description here

更新。在开放的简历标量是

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;
}

关于c++ - opencv标量中的错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23455491/

相关文章:

c++ - 在 OpenCV 2.4.3 中 reshape 矩阵失败

c++ - 如何从 SHBrowseForFolder 函数获取完整路径?

c++ - 在 C++ 中存储派生类的实例

c++ - Luci 无法启动请求的 CGI 程序 :/www/cgi-bin/sample. cgi: Exec error

python - 使用 houghCircles (OpenCV) 检测小圆圈

python - 如何修复 "TypeError: a float is required"消息?

c++ - 想要在 Web 应用程序中使用 native C 库,我有哪些选择?

c++ - 从主循环访问线程变量 - C++ - Windows

带有 CMake 错误的 OpenCV 构建

opencv - 如何在二值骨架化图像中追踪线段?