首先看一下Scalar的定义

    typedef struct Scalar
{
double val[];
}Scalar;

可以看到,Scalar是一个由长度为4的数组作为元素构成的结构体,Scalar最多可以存储四个值,没有提供的值默认是0。

Scalar常用的使用场景如下:

Mat M(,,CV_32FC2,Scalar(,));

上面的代码表示:创建一个2通道,且每个通道的值都为(1,3),深度为32,7行7列的图像矩阵。CV_32F表示每个元素的值的类型为32位浮点数,C2表示通道数为2,Scalar(1,3)表示对矩阵每个元素都赋值为(1,3),第一个通道中的值都是1,第二个通道中的值都是3.

实例1:

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <stdio.h>
using namespace std;
using namespace cv;
void scalar_demo1(){
Mat M(,,CV_32FC2,Scalar(,));
cout<<M<<endl;
}
void scalar_demo2(){
Mat M(,,CV_32FC3,Scalar(,,));
cout<<M<<endl;
}
void scalar_demo3(){
Mat M(,,CV_32FC4,Scalar(,,));
cout<<M<<endl;
}
int main(void)
{
//resize_img();
//convert_color_space();
scalar_demo1();
cout<<"**********************************"<<endl;
scalar_demo2();
cout<<"**********************************"<<endl;
scalar_demo3();
return ;
}

运行以上代码输出如下,可以发现最后一个矩阵是4通道的,但是我们在初始化的时候只给出了三个通道的值,所以第四个通道的值都默认为0。

实例2:

    #include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <stdio.h>
using namespace std;
using namespace cv; void scalar_demo4(){
Mat blue_m(,,CV_8UC3,Scalar(,,));
Mat green_m(,,CV_8UC3,Scalar(,,));
Mat red_m(,,CV_8UC3,Scalar(,,));
imshow("Blue",blue_m);
waitKey();
imshow("Green",green_m);
waitKey();
imshow("Red",red_m);
waitKey(); }
int main(void)
{
scalar_demo4();
return ;
}

opencv学习笔记——Scalar数据结构的理解的更多相关文章

  1. opencv学习笔记(一)IplImage, CvMat, Mat 的关系

    opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...

  2. opencv学习笔记(二)寻找轮廓

    opencv学习笔记(二)寻找轮廓 opencv中使用findContours函数来查找轮廓,这个函数的原型为: void findContours(InputOutputArray image, O ...

  3. (转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU

          首页 视界智尚 算法技术 每日技术 来打我呀 注册     OpenCV学习笔记大集锦 整理了我所了解的有关OpenCV的学习笔记.原理分析.使用例程等相关的博文.排序不分先后,随机整理的 ...

  4. OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波

    http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...

  5. OpenCV 学习笔记(模板匹配)

    OpenCV 学习笔记(模板匹配) 模板匹配是在一幅图像中寻找一个特定目标的方法之一.这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否"相似",当相似度足够 ...

  6. OpenCV 学习笔记 07 目标检测与识别

    目标检测与识别是计算机视觉中最常见的挑战之一.属于高级主题. 本章节将扩展目标检测的概念,首先探讨人脸识别技术,然后将该技术应用到显示生活中的各种目标检测. 1 目标检测与识别技术 为了与OpenCV ...

  7. OpenCV 学习笔记03 findContours函数

    opencv-python   4.0.1 1 函数释义 词义:发现轮廓! 从二进制图像中查找轮廓(Finds contours in a binary image):轮廓是形状分析和物体检测和识别的 ...

  8. 【opencv学习笔记六】图像的ROI区域选择与复制

    图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...

  9. opencv学习笔记D01

    目录 opencv学习笔记D01 一.图片读取 二.图片保存 三.图片展示 四.图片缩放 五.四种常用插值方式的比较 1.最近邻插值 2.双线性插值 3.区域插值 4.三次样条插值 我是尾巴: ope ...

随机推荐

  1. activiti小结

    前提:业务流程复杂且流程频繁变更的,建议使用工作流:其他情况不建议使用. activiti(v5.14),工作流引擎,基于jbpm.使用建模语言BPMN2.0进行定义. 工作流数据需要写入数据库,ac ...

  2. 观察者模式/ java实现附代码 /

    /注:场景和例子引用github上的设计模式.传送门:https://github.com/iluwatar/java-design-patterns/tree/master/observer 场景: ...

  3. C++ 判断

    C++ 判断判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的). #include <iostream> /* ru ...

  4. centos查看启动时间

    系统启动时间 who -b date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H ...

  5. rdesktop连接远程windows

    $ info rdesktop   //看一下帮助信息吧$rdesktop 192.168.1.1 //打开了一个8位色彩的,$rdesktop -a 16 192.168.1.1 //这个是16位色 ...

  6. C# Serializable(转)

    C# Serializable System.SerializableAttribute 串行化是指存储和获取磁盘文件.内存或其他地方中的对象.在串行化时,所有的实例数据都保存到存储介质上,在取消串行 ...

  7. ios 获取设备相关的信息

    .获取设备的信息 UIDevice *device = [[UIDevice alloc] int]; NSString *name = device.name; //获取设备所有者的名称 NSStr ...

  8. NPOI抓取WPS表格保存的EXCEL文件

    其实是可以抓取的,唯一不同就是Sheet的位置前进了一位.     var sheet1 = (HSSFSheet)hssfworkbook.GetSheetAt(1);     来自为知笔记(Wiz ...

  9. redis安装之zmalloc.h:55:2: error: #error "Newer version of jemalloc required"错误

    redis是C语言编写的软件,安装前需要编译,需要gcc编译环境,确认安装gcc编译环境后(安装gcc命令:yum install gcc-c++) 在redis解压目录下,确认有Makefile文件 ...

  10. 使用fetch出现unexpected end of input 解决方法

    传统的ajax(即xmlhttprequest)由于使用叫复杂,于是js新推出了fetch来获取后台数据,无需引进jq的$.ajax,也可以使用promise的链式用法去处理回调地狱,着实很方便,在谷 ...