前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >OpenCV中各种类型Mat数据读取

OpenCV中各种类型Mat数据读取

作者头像
OpenCV学堂
发布于 2019-07-12 08:28:16
发布于 2019-07-12 08:28:16
4.2K00
代码可运行
举报
运行总次数:0
代码可运行

OpenCV中Mat作为图像容器对象,支持各种数据类型像素值的存储与读取,但是初学者经常因此被被搞得很头大,无法正确的读取不同类别的数据。本文就来详细解释一波各个数据类别,以及不同类别之间的数据转换,搞定Mat中的数据类型问题。

Mat的数据类型定义

类型枚举定义

#define CV_8U 0 #define CV_8S 1 #define CV_16U 2 #define CV_16S 3 #define CV_32S 4 #define CV_32F 5 #define CV_64F 6

对应的数据类型如下:

八位无符号整型 (uchar) CV_8U 八位有符号整型 (schar) CV_8S 十六位无符号整型 (ushort) CV_16U 十六位有符号整型 (short) CV_16S 三十二位有符号整型 (int) CV_32S 三十二位浮点数 (float) CV_32F 六十四位浮点数 (double) CV_64F

获取各种类型Mat的像素值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Data_type* curr_row = src.ptr<data_type>(row_index)

其中data_type可以为
-uchar
-schar
-ushort
-short
-int
-float
-double


类别转换与获取简单示例:
// 类型转换
Mat dst;
src.convertTo(dst, CV_32F);


// 获取数据
uchar* data = (uchar*)src.data;
float* result = (float*)dst.data;

为什么要数据类型转换

这个是很多人问过我的问题,OpenCV中默认加载图像imread函数的返回是通道顺序为BGR色彩色图像,范围是0~255之间,数据类型是CV_8UC的每个通道占一个字节。但是实际上我们在图像处理过程把像素值看成了数据对待,数据处理与计算过程中就会产生各种浮点数据、正数或者负数,如果我们不对字节数据进行提前转换就会导致精度丢失问题或者数据溢出问题,最终就无法达成图像处理算法想要的结果。最后再说一次,图像是特殊的数据!套用一句很经典的话就是,理论上理论与实践是一致的,实际上理论与实践之间还有有点距离,这个就要靠工程人员经验解决。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
OpenCV加载图片显示对应类型(位深度)方法
对于部分初学者,偶尔会想在代码中查看图片的位深度,一般我们会用Mat.type()来获得类型,但是默认输出的是整型数字,不便于理解,可能还需要自己对照宏定义去查看,这里有一段代码可以实现将整型转为宏定义位深度
Color Space
2020/07/24
3K0
OpenCV加载图片显示对应类型(位深度)方法
opencv学习(一):安装以及相关基础概念
国内网络原因可能会安装失败,多试几次可能就好了,比较玄学。实在仍然不行,可能需要配置下代理。
ACK
2020/01/14
6720
Android OpenCV(二十九):图像腐蚀
表示B平移z后得到的结果,若平移后的结果包含于A,则我们记录下z点,所有满足上述条件的z点组成的集合就是A被B腐蚀后的结果。表示为:
Vaccae
2021/04/21
6290
Android OpenCV(二十九):图像腐蚀
【从零学习OpenCV 4】图像卷积
过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《从零学习OpenCV 4》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。
小白学视觉
2019/12/24
7500
【从零学习OpenCV 4】图像卷积
Opencv中数据结构Mat的相关属性
剑影啸清寒
2018/01/02
2.2K0
Opencv中数据结构Mat的相关属性
【从零学习OpenCV 4】图像膨胀
图像的膨胀与图像腐蚀是一对相反的过程,与图像腐蚀相似,图像膨胀同样需要结构元素用于控制图像膨胀的效果。结构元素可以任意指定结构的中心点,并且结构元素的尺寸和具体内容都可以根据需求自己定义。定义结构元素之后,将结构元素的中心点依次放到图像中每一个非0元素处,如果原图像中某个元素被结构元素覆盖,但是该像素的像素值不与结构元素中心点对应的像素点的像素值相同,那么将原图像中的该像素的像素值修改为结构元素中心点对应点的像素值。图像的膨胀过程示意图如图6-12所示,图6-12中左侧为待膨胀的原图像,中间为结构元素,首先将结构元素的中心与原图像中的A像素重合,将结构元素覆盖的所有像素的像素值都修改为1,将结构元素中心点依次与原图像中的每个像素重合,判断是否有需要填充的像素。原图像膨胀的结果如图6-17中右侧图像所示。
小白学视觉
2020/02/13
6260
弄明白OpenCV中的CvType各种参数意义以及相关方法
本篇内容基于java环境下,介绍OpenCV 4.6.0v 中创建 Mat 对象时传递的 CvType 参数。
zinyan.com
2023/07/14
7610
弄明白OpenCV中的CvType各种参数意义以及相关方法
【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
效果图看完,我们来唠唠嗑。 首先,需要说明的是,浅墨这篇文章最后的示例代码是采用两周前刚刚发布的2.4.9来书写的。里面的lib都已经改成了2.4.9版本的。如果大家需要运行的话,要么配置好2.4.9.要么把浅墨在工程中包含的末尾数字为249的各种lib改成之前的248或者你对应的OpenCV版本。 不然会提示: LINK : fatal error LNK1181: 无法打开输入文件“opencv_calib3d248.lib”之类的错误。 OpenCV 2.4.9的配置和之前的2.4.8差不多,如果还是不太清楚,具体可以参考浅墨修改过的对应2.4.9版的配置文章: 【OpenCV入门教程之一】 安装OpenCV:OpenCV 2.4.8或2.4.9 +VS 开发环境配置 第二,给大家分享一个OpenCV中写代码时节约时间的小常识。其实OpenCV中,不用namedWindow,直接imshow就可以显示出窗口。大家看下文的示例代码就可以发现,浅墨在写代码的时候并没有用namedWindow,遇到想显示出来的Mat变量直接imshow。我们一般是为了规范,才先用namedWindow创建窗口,再imshow出它来,因为我们还有需要用到指定窗口名称的地方,比如用到trackbar的时候。而一般情况想显示一个Mat变量的图片的话,直接imshow就可以啦。 OK,开始正文吧~ 一、关于边缘检测 在具体介绍之前,先来一起看看边缘检测的一般步骤吧。 1)滤波:边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感,因此必须采用滤波器来改善与噪声有关的边缘检测器的性能。常见的滤波方法主要有高斯滤波,即采用离散化的高斯函数产生一组归一化的高斯核(具体见“高斯滤波原理及其编程离散化实现方法”一文),然后基于高斯核函数对图像灰度矩阵的每一点进行加权求和(具体程序实现见下文)。 2)增强:增强边缘的基础是确定图像各点邻域强度的变化值。增强算法可以将图像灰度点邻域强度值有显著变化的点凸显出来。在具体编程实现时,可通过计算梯度幅值来确定。 3)检测:经过增强的图像,往往邻域中有很多点的梯度值比较大,而在特定的应用中,这些点并不是我们要找的边缘点,所以应该采用某种方法来对这些点进行取舍。实际工程中,常用的方法是通过阈值化方法来检测。 另外,需要注意,下文中讲到的Laplace算子,sobel算子和Scharr算子都是带方向的,所以,示例中我们分别写了X方向,Y方向和最终合成的的效果图。 OK,正餐开始,召唤canny算子。:) 二、canny算子篇 2.1 canny算子相关理论与概念讲解
全栈程序员站长
2022/09/02
1K0
【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
【从零学习OpenCV 4】图像距离变换
图像中两个像素之间的距离有多种定义方式,图像处理中常用的距离有欧式距离、街区距离和棋盘距离,本节中将重点介绍这三种距离的定义方式,以及如何利用两个像素间的距离来描述一幅图像。欧式距离,两个像素点之间的直线距离。与直角坐标系中两点之间的直线距离求取方式相同,分别计算两个像素在X方向和Y方向上的距离,之后利用勾股定理得到两个像素之间的距离,数学表示形式如式(6.1)所示。
小白学视觉
2020/02/12
1.3K0
【从零学习OpenCV 4】图像距离变换
opencv的初步使用(高斯模糊、边缘检测、灰度化、二值化、闭运算、绘制边缘)
前提:已经配好了opencv+Qt 这里只讲如何使用api,不怎么讲算法原理 既然要用opencv的库,首先把相应的头文件导进去吧 #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> #include<cv.h> using namespace cv; 我这里只导入了我用到了的头文件 using namespace cv;是用来声明c
张俊怡
2018/04/24
1.7K0
【opencv】cv::Mat 图像格式 (Data Type)
由于 at 方法接受的是 uchar 这样的数据类型,而非 CV_8U。 若是要使用 at 方法访问数据元素,在已知通道数和每个通道数据类型的情况下,指定给 at 方法的数据类型如下表所示:
JNingWei
2020/03/12
8.5K0
解决OpenCV Error: Assertion failed (ssize.width > 0 && ssize.height > 0) in cv::re
当我们在使用OpenCV进行图像处理时,有时候会遇到如下错误信息:OpenCV Error: Assertion failed (ssize.width > 0 && ssize.height > 0) in cv::resize, file C:\proj。这个错误通常是由于图像的宽度或高度为0导致的。在本篇文章中,我将介绍一些可能导致这个错误的原因,并提供一些解决方法。
大盘鸡拌面
2023/10/26
1.4K0
手撕OpenCV源码之filter2D(二)
前文对这个函数的分析是为了了解filter的实现结构,所以比较粗略,本文将更细致的分析opencv中filter2D的c++实现的细节,不涉及各种加速的实现方式 首先还是看函数原型:
OpenCV学堂
2018/09/29
4.2K0
降龙算法1:图像的基本数据格式(8K字)
开始更新降龙算法系列了。因为停更近半年了,所以先啰嗦几句话交代一下这个系列的前因后果:
周旋
2023/01/30
5800
Android OpenCV(三十一):图像形态学
形态学梯度能够描述目标的边界,根据图像腐蚀和膨胀与原图之间的关系计算得到,形态学梯度可以分为基本梯度、内部梯度和外部梯度。基本梯度是原图像膨胀后图像和腐蚀后图像间的差值图像,内部梯度图像是原图像和腐蚀后图像间的差值图像,外部梯度是膨胀后图像和原图像间的差值图像。
Vaccae
2021/04/21
6200
Android OpenCV(三十一):图像形态学
【OpenCV 4开发详解】图像腐蚀
图像的腐蚀过程与图像的卷积操作类似,都需要模板矩阵来控制运算的结果,在图像的腐蚀和膨胀中这个模板矩阵被称为结构元素。与图像卷积相同,结构元素可以任意指定图像的中心点,并且结构元素的尺寸和具体内容都可以根据需求自己定义。定义结构元素之后,将结构元素的中心点依次放到图像中每一个非0元素处,如果此时结构元素内所有的元素所覆盖的图像像素值均不为0,则保留结构元素中心点对应的图像像素,否则将删除结构元素中心点对应的像素。图像的腐蚀过程示意图如图6-12所示,图6-12中左侧为待腐蚀的原图像,中间为结构元素,首先将结构元素的中心与原图像中的A像素重合,此时结构元素中心点的左侧和上方元素所覆盖的图像像素值均为0,因此需要将原图像中的A像素删除;当把结构元素的中心点与B像素重合时,此时结构元素中所有的元素所覆盖的图像像素值均为1,因此保留原图像中的B像素。将结构元素中心点依次与原图像中的每个像素重合,判断每一个像素点是否保留或者删除,最终原图像腐蚀的结果如图6-12中右侧图像所示。
小白学视觉
2020/01/16
9140
【OpenCV 4开发详解】图像腐蚀
OpenCV基础01
在本节中,我将向您介绍OpenCV C++API的一些基本概念。这些概念将帮助您更轻松地理解和编写
软件架构师Michael
2023/09/10
2970
【从零学习OpenCV 4】高斯滤波
高斯噪声是一种常见的噪声,图像采集的众多过程中都容易引入高斯噪声,因此针对高斯噪声的高斯滤波也广泛应用于图像去噪领域。高斯滤波器考虑了像素离滤波器中心距离的影响,以滤波器中心位置为高斯分布的均值,根据高斯分布公式和每个像素离中心位置的距离计算出滤波器内每个位置的数值,从而形成一个形如图5-15所示的高斯滤波器。之后将高斯滤波器与图像之间进行滤波操作,进而实现对图像的高斯滤波。
小白学视觉
2019/12/30
1.4K0
【从零学习OpenCV 4】均值滤波
经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《从零学习OpenCV 4》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。
小白学视觉
2019/12/25
7320
opencv学习笔记 高斯模糊
高斯平滑函数GaussianBlur():定义:GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)
用户2965768
2018/08/30
6040
opencv学习笔记 高斯模糊
推荐阅读
相关推荐
OpenCV加载图片显示对应类型(位深度)方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验