IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Opencv常见数据类型(二) -> 正文阅读

[人工智能]Opencv常见数据类型(二)

一.cv::Scalar类

1.基本概念

在介绍cv::Scalar类之前,我们先看cv::Scalar_类在Opencv中的定义,如下:

template<typename _Tp> class Scalar_ : public Vec<_Tp, 4>
{
public:
    // default constructor
    Scalar_()//参数数量 0
    Scalar_(_Tp v0, _Tp v1, _Tp v2=0, _Tp v3=0);//参数数量2,3,4都可以
    Scalar_(_Tp v0); //参数数量 1
 
    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 if v1 == v2 == v3 == 0
    bool isReal() const;
};
 
typedef Scalar_<double> Scalar; 

我们再来看一看cv::Scalar_类的默认构造方式的具体实现:

Scalar_<_Tp>::Scalar_()
{
    this->val[0] = this->val[1] = this->val[2] = this->val[3] = 0;
}

从中我们可以看出cv::Scalar_类表示是一维数组,只有4个元素,其主要用于Opencv中传递像素值,如RGB颜色值。而通过最后一行我们可以知道cv::Scalar是cv::Scalar_类的double类型的别名,目的是方便声明定义,即cv::Scalar类实际上是一个四维双精度向量。

2.用法

(1)从定义中我们可以知道cv::Scalar类支持的构造方式有以下几种:

	cv::Scalar s;//默认构造方式
	cv::Scalar s1(1, 2, 3, 4);
	cv::Scalar s2(5, 2);//赋值构造
	cv::Scalar s3(s2);//拷贝构造器

(2)cv::Scalar类直接继承自cv::Vec类模板的实例,因此它也继承了cv::Vec类所有向量代数运算,成员访问函数(如operator[])等属性,此外,cv::Scalar类还支持元素乘法,共轭等:

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

using namespace cv;
using namespace std;

int main()
{
	cv::Scalar s;//默认构造方式
	cv::Scalar s1(1, 2, 3, 4);
	cv::Scalar s2(5, 2);//赋值构造
	cv::Scalar s3(s2);//拷贝构造器
	cout << "s1=" << s1 << endl;
	cout << "s3=" << s3 << endl;
	cout << "the first element of s2 is " << s2[0] << endl;
	cout << "s1+s2=" << s1 + s2 << endl;
	cout <<"元素乘法:"<< s1.mul(s2) << endl;//返回一个四维向量,向量中第n个元素为s1中第n个元素与s2中第n个元素的乘积
	cout << "(四元数)共轭" << s1.conj() << endl;//return cv::Scalar(x0,-x1,-x2,-x3)
	cout << "(四元数)真正实部检验" << s1.isReal() << endl;//return true if(x1==x2==x3==0)
}

运行结果如下:

附:

1.四元数

2.cv::Scalar_类成员函数?

二.cv::Size类

1.基本概念

在Opencv中,cv::Size类的定义如下:

template<typename _Tp> class Size_
{
public:
    typedef _Tp value_type;

    //! default constructor
    Size_();
    Size_(_Tp _width, _Tp _height);
    Size_(const Size_& sz);
    Size_(Size_&& sz) CV_NOEXCEPT;
    Size_(const Point_<_Tp>& pt);

    Size_& operator = (const Size_& sz);
    Size_& operator = (Size_&& sz) CV_NOEXCEPT;
    //! the area (width*height)
    _Tp area() const;
    //! aspect ratio (width/height)
    double aspectRatio() const;
    //! true if empty
    bool empty() const;

    //! conversion of another data type.
    template<typename _Tp2> operator Size_<_Tp2>() const;

    _Tp width; //!< the width
    _Tp height; //!< the height
};

typedef Size_<int> Size2i;
typedef Size_<int64> Size2l;
typedef Size_<float> Size2f;
typedef Size_<double> Size2d;
typedef Size2i Size;

与cv::Scalar类一样,cv::Size类(尺寸类)是cv::Size_类int类型的别名,其主要作用是用于指定图像或矩形大小。它在实践中与cv::Point类一样,并且可以与cv::Point类相互转换,两者的主要区别是cv::Point类的成员变量名是x和y,cv::Size类的成员变量名是width和height。

二.用法

(1)cv::Size类的构造方式也有默认构造,赋值构造,拷贝构造三种:

	cv::Size s;
	cv::Size2f s1;//默认构造
	cv::Size2d s2(4, 5);//赋值构造
	cv::Size2d s3(s2);//拷贝构造

(2)cv::Size类常用的运算主要有area()函数,用于计算面积,返回值为width*height,?aspectRatio()函数,用于计算纵横比(宽度/高度),以及一个判断是否为空的empty()函数:

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

using namespace cv;
using namespace std;

int main()
{
	Size s;
	Size2f s1;//默认构造
	Size2d s2(4, 5);//赋值构造
	Size2d s3(s2);//拷贝构造
	cout << s2.height << " " << s2.width << endl;//成员访问
	cout << "the area =" << s3.area() << endl;
	cout << "tne aspectRatio=" << s3.aspectRatio() << endl;
	cout << s3.empty() << endl;
}

运行后的结果为:

附:

cv::Size_类

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-11 12:23:47  更:2021-08-11 12:25:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/13 17:26:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码