原创

避坑!OpenCV Java 的 new Scalar(1.0) 不会自动填充所有通道!!!!!


new Scalar(1.0)(1.0, 0, 0, 0)只有第 1 个通道为 1,其余通道为 0
new Scalar(1.0, 1.0)(1.0, 1.0, 0, 0)前 2 通道为 1
new Scalar(1.0, 1.0, 1.0)(1.0, 1.0, 1.0, 0)3 通道为 1
new Scalar(1.0, 1.0, 1.0, 1.0)(1.0, 1.0, 1.0, 1.0)全部通道为 1

下面是java的源码:

public Scalar(double v0, double v1, double v2, double v3) {
        this.val = new double[]{v0, v1, v2, v3};
    }

    public Scalar(double v0, double v1, double v2) {
        this.val = new double[]{v0, v1, v2, (double)0.0F};
    }

    public Scalar(double v0, double v1) {
        this.val = new double[]{v0, v1, (double)0.0F, (double)0.0F};
    }

    public Scalar(double v0) {
        this.val = new double[]{v0, (double)0.0F, (double)0.0F, (double)0.0F};
    }

    public Scalar(double[] vals) {
        if (vals != null && vals.length == 4) {
            this.val = (double[])(([D)vals).clone();
        } else {
            this.val = new double[4];
            this.set(vals);
        }
    }

下面是c++源码:

template<typename _Tp> class Scalar_ : public Vec<_Tp, 4>
{
public:
    //! default constructor
    Scalar_();
    Scalar_(_Tp v0, _Tp v1, _Tp v2=0, _Tp v3=0);
    Scalar_(_Tp v0);
正文到此结束