摘要:本篇文章主要讲解Python调用OpenCV获取图像属性,截取感兴趣ROI区域,处理图像通道。

本文分享自华为云社区《[Python图像处理] 三.获取图像属性、兴趣ROI区域及通道处理 | 【生长吧!Python】》,作者: eastmount 。

一.获取图像属性

1.形状-shape

通过shape关键字获取图像的形状,返回包含行数、列数、通道数的元祖。其中灰度图像返回行数和列数,彩色图像返回行数、列数和通道数。如下图所示:

# -*- coding:utf-8 -*-
import cv2
import numpy #读取图片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED) #获取图像形状
print(img.shape) #显示图像
cv2.imshow("Demo", img) #等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下图所示:(445L, 670L, 3L),该图共445行、670列像素,3个通道。

2.像素数目-size

通过size关键字获取图像的像素数目,其中灰度图像返回行数 * 列数,彩色图像返回行数 * 列数 * 通道数。代码如下:

# -*- coding:utf-8 -*-
import cv2
import numpy #读取图片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED) #获取图像形状
print(img.shape) #获取像素数目
print(img.size)

输出结果:

(445L, 670L, 3L)
894450

3.图像类型-dtype

通过dtype关键字获取图像的数据类型,通常返回uint8。代码如下:

# -*- coding:utf-8 -*-
import cv2
import numpy #读取图片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED) #获取图像形状
print(img.shape) #获取像素数目
print(img.size) #获取图像类型
print(img.dtype)

输出结果:

(445L, 670L, 3L)
894450
uint8

二.获取感兴趣ROI区域

ROI(Region of Interest)表示感兴趣区域。它是指从被处理图像以方框、圆形、椭圆、不规则多边形等方式勾勒出需要处理的区域。可以通过各种算子(Operator)和函数求得感兴趣ROI区域,并进行图像的下一步处理,被广泛应用于热点地图、人脸识别、图像分割等领域。

通过像素矩阵可以直接获取ROI区域,如img[200:400, 200:400]。

代码如下:

# -*- coding:utf-8 -*-
import cv2
import numpy as np #读取图片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED) #定义200*100矩阵 3对应BGR
face = np.ones((200, 100, 3)) #显示原始图像
cv2.imshow("Demo", img) #显示ROI区域
face = img[200:400, 200:300]
cv2.imshow("face", face) #等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下图所示:

下面将提取的ROI图像进行融合实验,代码如下:

# -*- coding:utf-8 -*-
import cv2
import numpy as np #读取图片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED) #定义300*100矩阵 3对应BGR
face = np.ones((200, 200, 3)) #显示原始图像
cv2.imshow("Demo", img) #显示ROI区域
face = img[100:300, 150:350]
img[0:200,0:200] = face
cv2.imshow("face", img) #等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

将提取的头部融合至图像左上角部分,如下图所示:

如果想将两张图像进行融合,只需再读取一张图像即可,方法原理类似。 实现代码如下:

# -*- coding:utf-8 -*-
import cv2
import numpy as np #读取图片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
test = cv2.imread("test3.jpg", cv2.IMREAD_UNCHANGED) #定义300*100矩阵 3对应BGR
face = np.ones((200, 200, 3)) #显示原始图像
cv2.imshow("Demo", img) #显示ROI区域
face = img[100:300, 150:350]
test[400:600,400:600] = face
cv2.imshow("Pic", test) #等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下图所示:

三.图像通道处理

1.通道拆分

OpenCV读取的彩色图像由B、G、R三原色组成,可以通过下面代码获取不同的通道。

b = img[:, :, 0]
g = img[:, :, 1]
r = img[:, :, 2]

也可以使用split()函数拆分通道,下面是拆分不同通道再显示的代码。

# -*- coding:utf-8 -*-
import cv2
import numpy as np #读取图片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED) #拆分通道
b, g, r = cv2.split(img) #显示原始图像
cv2.imshow("B", b)
cv2.imshow("G", g)
cv2.imshow("R", r) #等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下图所示:

也可以获取不同的通道,核心代码如下所示: b = cv2.split(a)[0] g = cv2.split(a)[1] r = cv2.split(a)[2]

2.通道合并

图像通道合并主要调用merge()函数实现,核心代码如下:

m = cv2.merge([b, g, r])

# -*- coding:utf-8 -*-
import cv2
import numpy as np #读取图片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED) #拆分通道
b, g, r = cv2.split(img) #合并通道
m = cv2.merge([b, g, r])
cv2.imshow("Merge", m) #等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下:

注意,如果是合并[r,g,b]三通道,则显示如下所示,因OpenCV是按照BGR进行读取的。

b, g, r = cv2.split(img)
m = cv2.merge([r, g, b])
cv2.imshow(“Merge”, m)

同时,可以提取图像的不同颜色,提取B颜色通道,G、B通道设置为0,则显示蓝色。代码如下所示:

# -*- coding:utf-8 -*-
import cv2
import numpy as np #读取图片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
rows, cols, chn = img.shape #拆分通道
b = cv2.split(img)[0]
g = np.zeros((rows,cols),dtype=img.dtype)
r = np.zeros((rows,cols),dtype=img.dtype) #合并通道
m = cv2.merge([b, g, r])
cv2.imshow("Merge", m) #等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

蓝色通道输出结果如下所示:

绿色通道核心代码及输出结果如下所示:

rows, cols, chn = img.shape
b = np.zeros((rows,cols),dtype=img.dtype)
g = cv2.split(img)[1]
r = np.zeros((rows,cols),dtype=img.dtype)
m = cv2.merge([b, g, r])

红色通道修改方法与上面类似。希望文章对大家有所帮助,如果有错误或不足之处,还请海涵。

该系列在github所有源代码:

点击关注,第一时间了解华为云新鲜技术~

跟我学Python图像处理丨获取图像属性、兴趣ROI区域及通道处理的更多相关文章

  1. Python图像处理:如何获取图像属性、兴趣ROI区域及通道处理

    摘要:本篇文章主要讲解Python调用OpenCV获取图像属性,截取感兴趣ROI区域,处理图像通道. 本文分享自华为云社区<[Python图像处理] 三.获取图像属性.兴趣ROI区域及通道处理 ...

  2. Python 图像处理 OpenCV (3):图像属性、图像感兴趣 ROI 区域及通道处理

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 图像属性 图像 ...

  3. 跟我学Python图像处理丨基于灰度三维图的图像顶帽运算和黑帽运算

    摘要:本篇文章结合灰度三维图像讲解图像顶帽运算和图像黑猫运算,通过Python调用OpenCV函数实现. 本文分享自华为云社区<[Python图像处理] 十三.基于灰度三维图的图像顶帽运算和黑帽 ...

  4. 跟我学Python图像处理丨何为图像的灰度非线性变换

    摘要:本文主要讲解灰度线性变换,基础性知识希望对您有所帮助. 本文分享自华为云社区<[Python图像处理] 十六.图像的灰度非线性变换之对数变换.伽马变换>,作者:eastmount . ...

  5. 跟我学Python图像处理丨图像特效处理:毛玻璃、浮雕和油漆特效

    摘要:本文讲解常见的图像特效处理,从而让读者实现各种各样的图像特殊效果,并通过Python和OpenCV实现. 本文分享自华为云社区<[Python图像处理] 二十四.图像特效处理之毛玻璃.浮雕 ...

  6. 跟我学Python图像处理丨关于图像金字塔的图像向下取样和向上取样

    摘要:本文讲述图像金字塔知识,了解专门用于图像向上采样和向下采样的pyrUp()和pyrDown()函数. 本文分享自华为云社区<[Python图像处理] 二十一.图像金字塔之图像向下取样和向上 ...

  7. 跟我学Python图像处理丨带你掌握傅里叶变换原理及实现

    摘要:傅里叶变换主要是将时间域上的信号转变为频率域上的信号,用来进行图像除噪.图像增强等处理. 本文分享自华为云社区<[Python图像处理] 二十二.Python图像傅里叶变换原理及实现> ...

  8. 跟我学Python图像处理丨傅里叶变换之高通滤波和低通滤波

    摘要:本文讲解基于傅里叶变换的高通滤波和低通滤波. 本文分享自华为云社区<[Python图像处理] 二十三.傅里叶变换之高通滤波和低通滤波>,作者:eastmount . 一.高通滤波 傅 ...

  9. Python图像处理丨基于OpenCV和像素处理的图像灰度化处理

    摘要:本篇文章讲解图像灰度化处理的知识,结合OpenCV调用cv2.cvtColor()函数实现图像灰度操作,使用像素处理方法对图像进行灰度化处理. 本文分享自华为云社区<[Python图像处理 ...

随机推荐

  1. Vue Avoided redundant navigation to current location Error

    这个报错的根源就是vue-router组件,错误内容翻译一下是: Avoided redundant navigation to current location === 避免冗余导航到当前位置 这个 ...

  2. python 基础数据类型汇总

    数据类型小结(各数据类型常用操作) 一.数字/整型int int()强行转化数字 二.bool类型False&True bool()强行转化布尔类型. 0,None,及各个空的字符类型为Fal ...

  3. Volcano:在离线作业混部管理平台,实现智能资源管理和作业调度

    摘要:本文结合华为CCE团队在混合部署方面的研究和实战,介绍了混合部署的背景.概念.混部技术的设计方案和实际落地情况,以及对未来的计划和展望. 现代互联网数据中心的规模随着应用服务需求的快速增长而不断 ...

  4. (stm32f103学习总结)—USART串口通信

    一. USART简介 USART即通用同步异步收发器,它能够灵活地与外部设备进行全双工 数据交换,满足外部设备对工业标准 NRZ 异步串行数据格式的要求. UART即通用异步收发器,它是在USART基 ...

  5. WePY为了兼容支付宝小程序,改了好几十行代码

    早在16年底,就有流出支付宝在做小程序的事情,见<如何看待支付宝推出「小程序」?>,今年8月18号支付宝版本小程序的终于公测,十月怀胎实属不易啊. 紧接着就有人给我提ISSUE了: 此时我 ...

  6. 纹理集打包和动画转换工具Texture Merge的使用教程

    Texture Merger 可将零散纹理拼合为整图,同时也可以解析SWF.GIF动画,制作Egret位图文本,导出可供Egret使用的配置文件,其纹理集制作功能在小游戏开发中可以起到降低小游戏包体的 ...

  7. 第二次课堂练习-连接hbase数据库-页面展示

    图片来源:中国知网 页面来源:中国科学院文献情报中心-科技查新平台 如有侵权,请评论留言

  8. IDEA中 mybatis-config、applicationContext.xml、log4j.properties、SpringMVC等文件没有图标标识符号,不是一个xml文件

    1. 举例说明 mybatis-config.xml文件不显示图标,识别不出该xml文件 2. 解决办法 1)先点击 File -> Settings-,然后贴入下面代码 (2) 具体操作如下图 ...

  9. executeFind()方法和execute()方法区别

    返回类型不同:executeFind()方法返回集合,execute()方法返回对象 executeFind @Override public List<TCpContact> getCp ...

  10. EMS恢复禁用邮箱

    使用PowerShell命令恢复禁用邮箱 键入以下命令: [PS] C:\Windows\system32>Get-MailboxDatabase | Get-MailboxStatistics ...