opencv Scalar

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_(_Tp v0);

    template<typename _Tp2, int cn>
    Scalar_(const Vec<_Tp2, cn>& v);

    //! returns a scalar with all elements set to v0
    static Scalar_<_Tp> all(_Tp v0);

    //! conversion to another data type
    template<typename T2> operator Scalar_<T2>() const;

    //! per-element product
    Scalar_<_Tp> mul(const Scalar_<_Tp>& a, 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;

可以看出Scalar是一个由长度为4的数组作为元素构成的类,Scalar最多可以存储四个值,没有提供的值默认是0,一般用来存放像素值。


#include<opencv2/core/core.hpp>
#include<iostream>

int main(){
    cv::Scalar scalar(125);
    cv::Mat mat(2,3,CV_8UC1,scalar);
    std::cout<<mat<<std::endl;
    std::cout<<std::endl;

    cv::Scalar scalar1(0,255);
    cv::Mat mat1(4,4,CV_32FC2,scalar1);
    std::cout<<mat1<<std::endl;
    std::cout<<std::endl;

    cv::Scalar scalar2(0,255,255);
    cv::Mat mat2(4,4,CV_32FC3,scalar2);
    std::cout<<mat2<<std::endl;
    std::cout<<std::endl;

    cv::Scalar scalar3(0,255,255,0);
    cv::Mat mat3(4,4,CV_32FC4,scalar3);
    std::cout<<mat3<<std::endl;
    return 0;

}
cv::Mat mat(2,3,CV_8UC1,scalar)表示创建单通道,且每个通道的值都为125,深度为8,2行3列的图像矩阵。
CV_8UC1表示每个元素的值的类型为8位无符号整形,C1表示通道数为1,scalar(125)表示对矩阵每个元素都赋值为125.
cv::Mat mat1(4,4,CV_32FC2,scalar1)表示创建两通道,且每个通道的值分别为(0,255),深度为32,4行4列的图像矩阵。
CV_32FC2表示每个元素的值的类型为32位浮点数,C2表示通道数为2,scalar1(0,255)第一个通道中的值都是0,第二个通道中的值都是255。
cv::Mat mat2(4,4,CV_32FC3,scalar2)表示创建三通道,且每个通道的值分别为(0,255,255),深度为32,4行4列的图像矩阵。
CV_32FC3表示每个元素的值的类型为32位浮点数,C3表示通道数为3,scalar2(0,255,255)第一个通道中的值都是0,第二个通道中的值都是255,第三个通道中的值都是255。
cv::Mat mat3(4,4,CV_32FC4,scalar3)表示创建四通道,且每个通道的值分别为(0,255,255,0),深度为32,4行4列的图像矩阵。
CV_32FC4表示每个元素的值的类型为32位浮点数,C4表示通道数为4,scalar2(0,255,255,0)第一个通道中的值都是0,第二个通道中的值都是255,第三个通道中的值都是255,第四个通道中的值都是0。

#include<opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include<iostream>

int main(){

    cv::Mat mat(200,250,CV_32FC3,cv::Scalar(0,0,0));
    imshow("Scalar(0,0,0)",mat);

    cv::Mat mat1(200,250,CV_32FC3,cv::Scalar(0,0,255));
    imshow("Scalar(0,0,255)",mat1);

    cv::Mat mat2(200,250,CV_32FC3,cv::Scalar(0,255,0));
    imshow("Scalar(0,255,0)",mat2);

    cv::Mat mat3(200,250,CV_32FC3,cv::Scalar(255,0,0));
    imshow("Scalar(255,0,0)",mat3);

    cv::Mat mat4(200,250,CV_32FC3,cv::Scalar(0,255,255));
    imshow("Scalar(0,255,255)",mat4);

    cv::Mat mat5(200,250,CV_32FC3,cv::Scalar(255,0,255));
    imshow("Scalar(255,0,255)",mat5);

    cv::Mat mat6(200,250,CV_32FC3,cv::Scalar(255,255,0));
    imshow("Scalar(255,255,0)",mat6);

    cv::Mat mat7(200,250,CV_32FC3,cv::Scalar(255,255,255));
    imshow("Scalar(255,255,255)",mat7);

    cv::Mat mat8(200,250,CV_32FC4,cv::Scalar(0,0,0,255));
    imshow("Scalar(0,0,0,255)",mat8);

    cv::Mat mat9(200,250,CV_32FC4,cv::Scalar(0,0,255,255));
    imshow("Scalar(0,0,255,255)",mat9);

    cv::Mat mat10(200,250,CV_32FC4,cv::Scalar(0,255,0,255));
    imshow("Scalar(0,255,0,255)",mat10);

    cv::Mat mat11(200,250,CV_32FC4,cv::Scalar(255,0,0,255));
    imshow("Scalar(255,0,0,255)",mat11);

    cv::Mat mat12(200,250,CV_32FC4,cv::Scalar(0,255,255,255));
    imshow("Scalar(0,255,255,255)",mat12);

    cv::Mat mat13(200,250,CV_32FC4,cv::Scalar(255,0,255,255));
    imshow("Scalar(255,0,255,255)",mat13);

    cv::Mat mat14(200,250,CV_32FC4,cv::Scalar(255,255,0,255));
    imshow("Scalar(255,255,0,255)",mat14);

    cv::Mat mat15(200,250,CV_32FC4,cv::Scalar(255,255,255,255));
    imshow("Scalar(255,255,255,255)",mat15);

    cv::waitKey(0);
    return 0;

}

posted @ 2019-09-06 20:49  hiligei  阅读(718)  评论(0编辑  收藏  举报