| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 跟我学Python图像处理丨获取图像属性、兴趣ROI区域及通道处理 -> 正文阅读 |
|
[人工智能]跟我学Python图像处理丨获取图像属性、兴趣ROI区域及通道处理 |
本篇文章主要讲解Python调用OpenCV获取图像属性,截取感兴趣ROI区域,处理图像通道。 一.获取图像属性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]) 红色通道修改方法与上面类似。希望文章对大家有所帮助,如果有错误或不足之处,还请海涵。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 7:36:52- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |