【OpenCV】OpenCV实战从入门到精通之 -- 常用数据结构和函数(Point、Scalar、Size、Rect、cvtColor)
目录
1、点的表示:Point类
2、颜色的表示:Scalar类
3、尺寸的表示:Size类
4、矩形的表示:Rect类
5、颜色空间转换:cvtColor()函数
1、点的表示:Point类
Point类数据结构表示了二维坐标系下的点,即由图像坐标x和y指定的2D点。用法如下:
Point point;
point.x = 10;
point.y = 8;
或者:
Point point = Point(10, 8)
在OpenCV中有如下定义:
- typedef Point_<int> Point2i;
- typedef Point2i Point;
- typedef Point_<float> Point2f;
所以,Point_<int>、Point2i、Point互相等价,Point_<float>、Point2f互相等价
2、颜色的表示:Scalar类
Scalar()表示具有4个元素的数组,在OpenCV中用于传递像素值。
如下边颜色表达式,表示定义的RGB颜色值:红色分量为c,绿色分量为b,蓝色分量为a(OpenCV中颜色通道为BGR):
Scalar(a, b, c)
Scalar类其实就是Scalar_<double>。
3、尺寸的表示:Size类
OpenCV中有如下定义:
- typedef Size_<int> Size2i;
- typedef Size2i Size;
所以,Size_<int>、Size2i、Size这三个类型是等价的。
OpenCV中常用的Size构造函数为:
- Size_<int>(_TP _width, _Tp _height)
可以使用XXX.width和XXX.height来分别表示宽度和高度。
下边是Size的一个例子:
Size(5,5) //构造出的Size宽度和高度都为5,即XXX.width和XXX.height都为5
4、矩形的表示:Rect类
Rect类的成员变量有x,y,width,height,分别为左上角点的坐标和矩形的宽和高。
常用的成员函数有:
- Size():返回值为Size
- area():返回矩形的面积
- contains(Points):判断点是否在矩形内
- inside(Rect):判断矩形是否在该矩形内
- tl:返回左上角点坐标
- br:返回右下角点坐标
求两个矩形的交集和并集:
Rect rect = rect1 & rect2;
Rect rect = rect1 | rect2;
矩形进行平移操作和缩放操作:
Rect rectShift = rect + point;
Rect rectScale = rect + size;
5、颜色空间转换:cvtColor()函数
cvtColor()函数是颜色空间转换函数,能够实现RGB颜色向HSV、HSI等颜色空间的转换,也可以转换为灰度图像。
格式如下:
void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0)
参数说明:
第一个参数:输入图像
第二个参数:输出图像
第三个参数:颜色空间转换标识符
第四个参数:目标图像的通道数,若该参数为0,表示目标图像取源图像的通道数。
下边是一个调用示例:
cvtColor(stcImage, dstImage, COLOR_GRAY2BGR)
cvtColor()函数标识符如下表所示:
下边代码shi关于cvtColor()函数的测试:
# include <opencv2/opencv.hpp>
# include <iostream>using namespace cv;
using namespace std;void main(){Mat srcImage = imread("1.jpg", 1); //载入图像Mat dstImage_gray, dstImage_Lab, dstImage_HLS;imshow("原始图", srcImage); //显示原始图cvtColor(srcImage, dstImage_gray, COLOR_BGR2GRAY); //转换颜色空间imshow("Gray效果图", dstImage_gray); //显示效果图cvtColor(srcImage, dstImage_Lab, COLOR_BGR2Lab);imshow("Lab效果图", dstImage_Lab);cvtColor(srcImage, dstImage_HLS, COLOR_BGR2HSV);imshow("HLS效果图", dstImage_HLS);waitKey(); //保持窗口显示
}
运行就结果:
原始图 |
Gray效果图 |
Lab效果图 |
HLS效果图 |
【OpenCV】OpenCV实战从入门到精通之 -- 常用数据结构和函数(Point、Scalar、Size、Rect、cvtColor)相关推荐
- 【Python】Python实战从入门到精通之二 -- 教你使用Python中列表操作
本文是Python实战–从入门到精通系列的第二篇文章: [Python]Python实战从入门到精通之一 – 教你深入理解Python中的变量和数据类型 Python实战从入门到精通之二 – 教你使用 ...
- 【OpenCV】OpenCV实战从入门到精通之 -- 输入输出XML和YAML文件详解
1.XML和YAML文件简介 XML文件是一种元标记语言,即开发者可以根据自身需要定义自己的标记.它是一种语义和结构语言,描述了文档的语义和结构. YAML以数据为中心,是一个可读性高,用来表达资料序 ...
- 【OpenCV】OpenCV实战从入门到精通之 -- 访问图像中的像素
目录 1.图像在内存之中的存储方式 2.颜色空间缩减 3.LUT函数:Look up table操作 4.计时函数 5.访问图像中像素的三类方法 5.1.指针访问像素 5.2.迭代器操作像素 5.3. ...
- 【OpenCV】OpenCV实战从入门到精通之 -- 指针访问、迭代器iterator、动态地址计算配合at元素
目录 1.指针访问像素 2.迭代器操作像素 3.动态地址计算 OpenCV中,有三种方式访问图像像素: 指针访问:C操作符[]: 迭代器iterator 动态地址计算 上述方法在访问速度上略有差异.d ...
- 【OpenCV】OpenCV实战从入门到精通之 -- 基本图像绘制
目录 1.DrawEllipse()函数的写法 2.DrawFilledCircle()函数的写法 3.DrawPolygon()函数的写法 4.DrawLine()函数的写法 基本绘制图形代码: m ...
- 【OpenCV】OpenCV实战从入门到精通之 -- 显示创建Mat对象的七种方法
目录 1.使用Mat()构造函数 2.C\C++中构造函数进行初始化 3.为已经存在的IplImage指针创建信息头 4.利用Create()函数 5.Matlab方式的初始化 6.对小矩阵使用逗号分 ...
- 【OpenCV】OpenCV实战从入门到精通之 -- 图像对比度、亮度值调整
理论依据 首先了解一下算子的概念.一般的图像处理算子都是一个函数,它接受一个或多个输入图像,并产生输出图像.下面是算子的一般形式: 或者 图像亮度和对比度的次奥做属于图像变换中比较简单的点操作(poi ...
- 【OpenCV】OpenCV实战从入门到精通之 -- 离散傅里叶变换相关函数详解
目录 1.dft()函数 2.返回DFT最优尺寸大小:getOptimalDFTSize()函数 3.扩充图像边界:copyMakeBorder()函数 4.计算二维矢量的幅值:magnitude() ...
- opencv+python实战日记 入门篇(八)色块识别
色块识别 import cv2 import numpy as npframeWidth = 640 frameHeight = 480 cap = cv2.VideoCapture(0)#获取摄像头 ...
最新文章
- 机器学习模型部署都有哪些坑?
- Cloud Control 13c 13.3安装(二) agent 部署
- linux c 指针 内存 泄漏几种情况
- 【LeetCode】128. 最长连续序列
- 张新、黎民、王亮三位老师分别来自湖南、广西、甘肃,分别教语文、数学和英语。已知:(1)张新不是湖南人,黎明不是广西人;(2)湖南的老师不教英语;(3)广西的老师教语文;(4)黎民不教数学。由此可知,王
- 一个 js 中值传递和引用传递的坑。
- 相对路径和绝对路径概念
- docker搭建replication集群
- mongodb的java驱动包_mongodb的java驱动包
- 单片机,微控制器和微处理器的主要区别?
- POJ 2923 Relocation(状压DP)题解
- 非常的好的协同过滤入门文章(ZZ)
- IDEA多module的项目共享配置文件的处理
- php导航自助收录源码,最近网上流行的导航网秒收录网站php源码
- 手把手教你使用Admob广告中介
- 黄宁然——走过你来时的路
- word转html linux java,Java-linux下如何代码实现word转换成html
- 锅炉软化水不合格是怎么回事?该如何解决?
- JAVA中的CAS算法
- alpine linux系统操作
热门文章
- C# 数组增加元素_C#的集合类型及使用技巧
- sinr是什么意思_明明是满格信号,可是却不如两三格,这是什么情况?
- java异常分类三大类_JAVA 中异常的分类
- 2017二级c语言选择题,2017年9月计算机二级C语言考试选择题
- 计算机密码学奖,上海交通大学计算机科学与工程系(CSE)
- html隐藏并失效,如果元素开始隐藏,css过渡将不起作用
- python print(f)执行将报错_Linux中为什么执行自己的程序要在前面加./
- linux内网服务器映射到公网地址吗,LINUX 内网设备将服务映射到公网地址
- modelsim10.1a安装破解说明
- pythonsplit函数_Python split()函数如何工作