我的编程空间,编程开发者的网络收藏夹
学习永远不晚

聊聊Qt+OpenCV联合开发之图像的创建与赋值问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

聊聊Qt+OpenCV联合开发之图像的创建与赋值问题

一、Mat基本结构

1、Mat不但是一个非常有用的图像容器类,同时也是一个通用的矩阵类,它mat分为头部(包括图像的大小、宽高、类型、通道数等)和数据部分(像素的值的集合)

2、获取的mat对象赋值给另一个对象时候,相当于把这个指针重新指向原来的数据,实质上还是指向同一个DataBlock。只有在进行克隆或者拷贝的时候,才会把这个Mat中所有的数据复制一份供你使用。Mat基本结构如图所示。

 补充:

1、数据部分主要包含图像的像素数据,各个像素点的像素值。若单通道,每个像素点只有一个值;若三通道,每个像素点有三个值。

2、Mat 对象的创建有多种方式:克隆、复制、赋值、构造函数。速度从快到慢:构造函数、赋值、复制、克隆

赋值法:赋值产生的对象与原赋值对象指向同一个内存地址Data Block。(浅拷贝)Copy/clone法:会产生的新内存对象,指向独立的Data Block。(深拷贝)构造函数:Mat img_constructe(class="lazy" data-src);//class="lazy" data-src为图片源地址

下面主要介绍图像的克隆及拷贝 

 二、图像的克隆及拷贝

1、clone函数

Mat img_clone = class="lazy" data-src.clone();

2、copyTo函数

c++原型:

 参数一:OutputArray,目标矩阵(输出的图片)。

3、示例

同以前一样,声明函数放在test1.h文件里,实现放在test1.cpp文件里

在main中测试

从下图可以看出,显示的两张图没什么区别

 三、创建图像

1、创建空白图像:

 如图所示

 此处zeros的函数原型:

  参数一:size,矩阵(图像)大小。

  参数二:type,图像类型

OpenCv的源代码中提到:(_type is CV_8UC1, CV_64FC3, CV_32SC(12) etc.)

CV_8UC1,CV_64FC3是枚举类型,所以这里的type可以是任何的预定义类型,结构如下:

CV_<bit_depth>(S|U|F)C<number_of_channels>

1、bit_depth-----比特数-----代表8bite,16bites,32bites,64bites
如果你现在创建了一个存储--灰度图片的Mat对象,这个图像的大小为宽100,高100,那么,现在这张灰度图片中有10000个像素点,它每一个像素点在内存空间所占的空间大小是8bite,8位对应的就是CV_8

 2、S|U|F--S--代表signed int---有符号整形
 U--代表--unsigned int----无符号整形
 F--代表--float---------单精度浮点型

3、C<number_of_channels>----代表一张图片的通道数,比如:
 1--灰度图片--grayImg---单通道图像
 2--RGB彩色图像---------3通道图像
 3--带Alph通道的RGB图像----4通道图像

如果不带通道数的这些类型就是默认通道数为1。

例如,CV_8U就等同于CV_8UC1,CV_32S就等同于CV_32SC1。

 将上述的代码修改成三通道后:

 可以看出原矩阵从8×8变为了24×8,因为原来是单通道,而现在为3通道,代表着每个像素点包含了3个像素值,可以说明图像在Mat上面真正的宽度等于通道数乘以Mat定义矩阵的宽度,即3*8=24。

2、创建通道都为1的图:

但是每个通道都为1的图不能用在三通道上,如图,结果就是每个像素点的第一个通道为1,其余通道都为0。

其实我们也可以对m3赋值,来改变他的第一个通道的值。

如果想要每个通道的值都为127,可以通过调用Scalar函数

 3、拷贝和赋值的区别

3.1用Scalar函数设置m3对象为绿色

 3.2m3赋值给m4,m4改为黄色

3.3拷贝m3给m4,m4改为黄色

区别:拷贝不会改变原对象,而赋值则m4一变m3也会随之改变

 原创不易,转载请注明出处:

https://blog.csdn.net/hml111666/article/details/122696593

CV_8UC1,CV_32FC3等参数的含义参考链接:

https://blog.csdn.net/qq_37764129/article/details/82078255

到此这篇关于Qt+OpenCV联合开发之图像的创建与赋值的文章就介绍到这了,更多相关Qt+OpenCV联合开发内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

聊聊Qt+OpenCV联合开发之图像的创建与赋值问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Qt+OpenCV联合开发中图像的创建与赋值是怎样的

这篇文章主要为大家分析了Qt+OpenCV联合开发中图像的创建与赋值是怎样的的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Qt+OpenCV联合开发中图像的
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录