OpenCV:Scalar数据类型理解

简介: OpenCV:Scalar数据类型理解

Scalar


定义:



首先单词scalar的意思是标量,但是我们经常可以看到Scalar是包含多个值的,很像是一个向量,这是怎么回事呢?很是让人感觉困惑。先收起我们的困惑,首先来看看,Scalar的定义:


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


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


使用:


Scalar常用的使用场景如下:


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


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


案例1:通道的建立与打印



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


#include <iostream>
#include <math.h>
#include <opencv2/opencv.hpp>
#include<opencv2/highgui.hpp>
#include <opencv2/highgui/highgui_c.h>  
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)
{
  //resize_img();
  //convert_color_space();
  scalar_demo1();
  cout << "**********************************" << endl;
  scalar_demo2();
  cout << "**********************************" << endl;
  scalar_demo3();
  return 0;
}


案例2:打印相同通道数矩阵图像


它将各个通道的值构成一个整体,赋给具有相同通道数的矩阵元素。



#include <iostream>
#include <math.h>
#include <opencv2/opencv.hpp>
#include<opencv2/highgui.hpp>
#include <opencv2/highgui/highgui_c.h>  
using namespace std;
using namespace cv;
void scalar_demo4() {
  Mat blue_m(256, 256, CV_8UC3, Scalar(255, 0, 0));
  Mat green_m(256, 256, CV_8UC3, Scalar(0, 255, 0));
  Mat red_m(256, 256, CV_8UC3, Scalar(0, 0, 255));
  imshow("Blue", blue_m);
  //waitKey(0);
  imshow("Green", green_m);
  //waitKey(0);
  imshow("Red", red_m);
  waitKey(0);
}
int main(void)
{
  scalar_demo4();
  return 0;
}
相关文章
|
计算机视觉 Python
【opencv】图像数据类型由numpy转为tensor后颜色改变
【opencv】图像数据类型由numpy转为tensor后颜色改变
252 1
【opencv】图像数据类型由numpy转为tensor后颜色改变
|
2天前
|
计算机视觉
OpenCV图像运动模糊
OpenCV图像运动模糊
8 0
|
2天前
|
计算机视觉
OpenCV图像阈值
OpenCV图像阈值
5 0
|
2天前
|
计算机视觉
OpenCV图像混合
OpenCV图像混合
7 0
|
2天前
|
计算机视觉 Python
OpenCV为图像扩边(填充)
OpenCV为图像扩边(填充)
9 0
|
2天前
|
计算机视觉 Python
轻松掌握opencv的8种图像变换
轻松掌握opencv的8种图像变换
|
2天前
|
算法 计算机视觉
【OpenCV】- 图像修复
【OpenCV】- 图像修复
|
2天前
|
Serverless 计算机视觉
【OpenCV】-图像的矩
【OpenCV】-图像的矩