scalar-颜色类

函数原型如下:

template<typename _Tp> class Scalar_ : public Vec<_Tp, 4>
{public://! default constructorScalar_();Scalar_(_Tp v0, _Tp v1, _Tp v2=0, _Tp v3=0);//最常用;Scalar_(_Tp v0);Scalar_(const Scalar_& s);Scalar_(Scalar_&& s) CV_NOEXCEPT;Scalar_& operator=(const Scalar_& s);Scalar_& operator=(Scalar_&& s) CV_NOEXCEPT;template<typename _Tp2, int cn>Scalar_(const Vec<_Tp2, cn>& v);//! returns a scalar with all elements set to v0static Scalar_<_Tp> all(_Tp v0);//! conversion to another data typetemplate<typename T2> operator Scalar_<T2>() const;//! per-element productScalar_<_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 == 0bool isReal() const;
};
 Scalar_(_Tp v0, _Tp v1, _Tp v2=0, _Tp v3=0);//最常用;
#include<iostream>
#include<opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{Scalar color(2, 3, 4);cout << "【颜色类】" << endl << color << endl;color.all(0);cout << color << endl;return 0;
}

【颜色类】
[2, 3, 4, 0]
[2, 3, 4, 0]
请按任意键继续. . .

重点:

首先需要理解以下句子:

Mat M(7,7,CV_32FC2,Scalar(1,3));

解释如下:创建一个M矩阵,7行7列,类型为CV_32F,CV_32F表示每个元素的值的类型为32位浮点数,C2表示有2个通道。Scalar(1,3)是对矩阵进行初始化赋值。第一个通道全为1,第2个通道全为3。

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
void scalar_demo1() {Mat M(4, 4, CV_32FC2, Scalar(1, 3));cout << M << endl;
}
void scalar_demo2() {Mat M(4, 4, CV_32FC3, Scalar(1, 2, 3));cout << M << endl;
}
void scalar_demo3() {Mat M(4, 4, CV_32FC4, Scalar(1, 2, 3));cout << M << endl;
}
int main(void)
{scalar_demo1();cout << "**********************************" << endl;scalar_demo2();cout << "**********************************" << endl;scalar_demo3();Mat M(400, 400, CV_32FC3, Scalar(255, 0, 0));/*cout << M << endl;*//*cout << M.rows << endl;cout << M.cols << endl;*/imshow("scalar_demo3", M);waitKey(0);return 0;
}

以下可以直观的了解到每一通道与Scala的关系:
M是以个像素容器,里面存放的是像素单元,通道数与BGR相对应;对于三通而言,scalar是设置bgr分量的值,相当于给每一个像素配色;
[1, 3, 1, 3, 1, 3, 1, 3;
1, 3, 1, 3, 1, 3, 1, 3;
1, 3, 1, 3, 1, 3, 1, 3;
1, 3, 1, 3, 1, 3, 1, 3]


[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3;
1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3;
1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3;
1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]


[1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0;
1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0;
1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0;
1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0]

成员函数all()

其作用是将图像中所用通道设置为指定数字;

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
int main(void)
{/*Mat scrImage(40, 40, CV_32FC3, Scalar(0, 255, 0));*/Mat scrImage(40, 40, CV_32FC3);Scalar color(0, 255, 0);  scrImage = color;                  //给每一像素赋值;imshow("scalar_demo1", scrImage);cout << scrImage << endl;scrImage =color.all(0);               /*将scrImage中每一个通道的值置成0;要将color.all(0)赋值给scrImage,否则color.all(0)没有意义;所以使用时要指定对象(通过=);*/cout << scrImage << endl;imshow("scalar_demo", scrImage);waitKey(0);return 0;
}
Mat scrImage(4, 4, CV_32FC3);//结果如下:

[0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0;
0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0;
0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0;
0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
请按任意键继续. . .

例子:

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
int main(void)
{Mat M(10, 10, CV_32FC3, Scalar(255, 0, 0));cout << M << endl;/*cout << M.rows << endl;cout << M.cols << endl;*/imshow("scalar_demo3", M);waitKey(0);return 0;
}
[255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0;255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0;255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0;255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0;255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0;255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0;255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0;255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0;255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0;255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0]

每一个【255, 0, 0】 代表一个蓝色像素点;

Mat M(10, 10, CV_32FC3, Scalar(255, 0, 0));

所以这句话可以理解为,创建一个10*10的像素矩阵,每一个像素RBG分量均是(255,0,0);
修改一下代码:

Mat M(400, 400, CV_32FC3, Scalar(255, 0, 0));

Mat M(400, 400, CV_32FC3, Scalar(255, 0, 0));

Mat M(400, 400, CV_8UC3, Scalar(0, 0, 255));

Mat M(400, 400, CV_8UC3, Scalar(127,255,212));

Scalar类-颜色类相关推荐

  1. Color类颜色对照表

    转自:http://www.cnblogs.com/live41/archive/2012/07/05/2578203.html Color类颜色对照表

  2. php 什么是对象,什么是PHP类和类的对象(PHP的类简介)

    什么是PHP类和类的对象(PHP的类简介) 类(Class):是一些变量与一些使用这些变量的函数的集合. 可简单理解为函数和变量的集合,或变量和函数的定义的集合. 语法是: class Class_n ...

  3. VB中什么是类,类模块有什么作用

    一.什么是类? 用面向对象的编程思想来看,类就是存储数据同时给一组相关代码赋予协调功能的方式.类是面向对象编程的核心. VB最为人垢病的是它的面向对象特性.实际上VB是一种基于对象的开发工具.在VB中 ...

  4. (一)、写一个怪物的类,类中有属性姓名(name),攻击力(attack),有打人的方法(fight)。(方法的重写)...

    (一).写一个怪物的类,类中有属性姓名(name),攻击力(attack),有打人的方法(fight). 再写两个子类: 红猪的类:类中有属性姓名(name),攻击力(attack),颜色(color ...

  5. 什么是java类,类怎么理解,类的含义

    如何理解类,类到底是个什么概念呢 既然读者能搜到我这篇文章,应该还是没理解类的含义,什么汽车.人.宠物等例子,师傅或者网上的资料都把这个例子用烂了,今天呢,作者就给大家举一个我觉得更好理解的例子. 这 ...

  6. Python tkinter Misc类+Wm类详解

    Misc类 这个类是模块中最基本的类,所有组件甚至是Tk都继承这个类.不过,组件并不直接继承这个类,而是继承Widget类(Widget类直接继承BaseWidget类,而BaseWidget类直接继 ...

  7. 安卓开发框架(MVP+主流框架+基类+工具类)--- Fresco

    转载自:http://blog.csdn.net/ljy_programmer/article/details/78273267 学习/参考地址:  https://www.fresco-cn.org ...

  8. Day-16 面向对象03 类与类之间的关系

    一.类与类之间的依赖关系 我用着你,但是你不属于我,这种关系是最弱的,比如,公司和雇员之间,对于正式员工,肯定要签订劳动合同,还得小心伺候着,但是如果是兼职,那无所谓,需要了你就来,不需要你就可以拜拜 ...

  9. java 设计一个geometricobject类,geometricobject类

    (2) Circle 类和 Rectangle 类是 GeometricObject 类的子类,其中应实现 父类的抽象方法. (3) 程序主方法中创建两个几何对象,一个圆和一个矩形,并用 ...... ...

最新文章

  1. python电脑软件下载-Python for windows
  2. 最佳实践: 勿在 Servlet 中实现 SingleThreadModel
  3. PHP配置虚机权限不足的问题
  4. 已知数据信息为 16位,最少应附加( )位校验位,以实现海明码纠错。
  5. 动态语言和静态语言的比较
  6. CentOS 7 各个版本的区别
  7. findstr()与strfind()的区别
  8. Struts结合梅花雪实现动态生成树
  9. Socket编程模式理解与对比
  10. 聊天IM的时间戳显示规则
  11. getchar吸收回车
  12. 使用jQuery高效制作网页特效 第六章习题
  13. Linux下libiconv库的安装和使用
  14. python调用海康威视的摄像头_Python调用海康威视网络相机之——python读取相机rtsp码流显示画面...
  15. [CAN] CAN BUS的错误检测和错误状态管理
  16. 工作半年就迷茫,给你一盏明灯
  17. 遥感数据存储格式 ----BSQ、 BIL、BIP及相互转换
  18. thymleaf 使用三目运算多个条件判断的写法
  19. instagram分析以预测与安的限量版运动鞋转售价格
  20. 力扣 347. 前 K 个高频元素

热门文章

  1. K-SVD简述——字典学习,稀疏编码
  2. Codeforces Round #644 (Div. 3) H.Binary Median
  3. linux启动时、登录时或注销时执行脚本
  4. android 设置布局宽度,Android布局宽度为50%
  5. 谈谈自己对线性最小二乘和非线性最小二乘之间关系的理解~
  6. 牛逼,一整套基于Java开发的的区块链系统(附完整源码)
  7. 万字长文:2019 年 京东 PLUS 会员前端重构之路
  8. iOS即时通讯之CocoaAsyncSocket源码解析一
  9. UKN服务器找不到,在windows下用ppk后缀文件登陆远程服务器
  10. SVM支持向量机算法做预测,matlab,预测精度非常高