OpenCV-MAT对象中使用pylab.imshow(img[:,:,::-1])如何实现将第二轴反向?
OpenCV-MAT对象中使用pylab.imshow(img[:,:,::-1])如何实现将第二轴反向?
系统平台:win10
一、明确几个概念:
1.OpenCV内部每个通道并没有固定对应某种颜色,只是在用imshow()、imread()、imwrite()等函数时,才将通道按照蓝、绿、红的顺序进行输入和输出;
2.img图像的shape和strides属性:
如:
>>>img[:].shape
(100,300,3) #数组第0个(或第0轴)为:图像的垂直尺寸(高度)——行数,第1个(或第1轴)为:图像的水平尺寸(宽度)——列数,第2个(或第2轴)为:图像的通道数
>>>img[:].strides
(900,3,1) #每个通道的数据占用1个字节,而一个像素点占用3个字节,一行数据占用:300*3=900个字节,因此,图像在内存中是连续存储的
注意:
- Mat对象本身提供的很多属性和方法并不符合python风格,因此PyOpenCV对Mat类进行了扩展,使得它能像NumPy数组一样使用
- Mat对象本身并不是数组,因此它没有shape属性,所以:>>>img.shape #会报错:AttributeError: 'Mat' object has no attribute 'shape'
3.python切片操作:
如: #s[a:b:c]形式是对s在a和b之间以c为间隔取值,c可以为负,负值意味着反向取值
>>>s = 'bicyle'
>>>s[::3]
'bye'
>>>s[::-1]
'elycib'
>>>s[::-2]
'eccb'
二、说明:img[:,:,::-1]
中括号中有两个逗号,四个冒号
[:,:,::-1]
第一个冒号——取遍图像的所有行数
第二个冒号——取遍图像的所有列数
第三个和第四个冒号——取遍图像的所有通道数,-1是反向取值
所以,如果一幅300*100的彩色图像,
执行img[:,:,::-1]后行列不变,通道数方向,由R、G、B更改为B、G、R,即第二轴反向
若是执行img[1:4,5:10,1:3:-1]后,第1行到第3行,第5列到第9列,第1通道到第2通道上的数据反向,即——第1行到第3行,第5列到第9列由R、G、B更改为R、B、G
- EF 约定介绍
- 关于EF Code First模式不同建模方式对建表产生的影响
- C# 命名空间和程序集
- C# new关键字和对象类型转换(双括号、is操作符、as操作符)
- 防止小程序多次点击跳转解决方案
- 详述 SQL 中的 distinct 和 row_number() over() 的区别及用法
- Web API系列之三 基本功能实现
- 微信小程序的省市选择组件 citySelector分享
- 详述 Java 语言中的 String、StringBuffer 和 StringBuilder 的使用方法及区别
- Class与Style绑定
- 机器学习并不难
- android的RadioGroup讲解
- asp.net MVC 应用程序的生命周期
- 091031 T PowerShell Solution
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用SAP C4C自定义BO association创建动态下拉列表
- 使用Express+TypeScript编写后台服务
- WPF 点击按钮时更改按钮样式界面效果的 XAML 实现方法
- ASP.NET Core 警惕可空类型开启之后模型校验失败
- os.path.abspath()的作用
- 机器学习-Coursera笔记
- 抖音解析-抖音视频去水印下载
- 自定义View | 基础概述 & 自定义TextView实战 & 基于源码分析自定义View继承自ViewGroup时无法正常绘制的问题
- AQS 原理剖析
- 无来源ip的RDP爆破防御对策小记
- 在 Kotlin 的 data class 中使用 MapStruct
- 内存占用用手就能算出来
- 如何在 CentOS 下快速搭建 Nginx 服务器
- Servlet API 源码剖析
- Borg:Google集群管理大杀器