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