python数字图像处理入门(跟我学Python图像处理获取图像属性)

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

一.获取图像属性

1.形状形状

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

python数字图像处理入门(跟我学Python图像处理获取图像属性)(1)

# -*- 编码:UTF-8 -*-

导入简历2

导入数字

#读取图片

img = cv2.imread(“test.jpg”, cv2.IMREAD_UNCHANGED)

#获取图像形状

打印(图像形状)

#显示图像

cv2.imshow(“Demo”, img)

#等待显示

cv2.waitKey(0)

cv2.destroyAllWindows()

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

python数字图像处理入门(跟我学Python图像处理获取图像属性)(2)

2.像素数目-大小

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

# -*- 编码:UTF-8 -*-

导入简历2

导入数字

#读取图片

img = cv2.imread(“test.jpg”, cv2.IMREAD_UNCHANGED)

#获取图像形状

打印(图像形状)

#获取像素数目

打印(图像大小)

输出结果:

(445公升, 670升, 3升)

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区域,并进行图像的下一步处理,被广泛应用于热点地图、人脸识别、图像分割等领域。

python数字图像处理入门(跟我学Python图像处理获取图像属性)(3)

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

python数字图像处理入门(跟我学Python图像处理获取图像属性)(4)

代码如下:

# -*- 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()

输出结果如下图所示:

python数字图像处理入门(跟我学Python图像处理获取图像属性)(5)

下面将提取的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()

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

python数字图像处理入门(跟我学Python图像处理获取图像属性)(6)

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

# -*- 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()

输出结果如下图所示:

python数字图像处理入门(跟我学Python图像处理获取图像属性)(7)

三.图像通道处理

1.通道拆分

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

b = img[:, :, 0]

g = img[:, :, 1]

r = img[:, :, 2]

python数字图像处理入门(跟我学Python图像处理获取图像属性)(8)

也可以使用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()

输出结果如下图所示:

python数字图像处理入门(跟我学Python图像处理获取图像属性)(9)

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

2.通道合并

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

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

# -*- 编码:UTF-8 -*-

导入简历2

将 numpy 导入为 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()

输出结果如下:

python数字图像处理入门(跟我学Python图像处理获取图像属性)(10)

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

b, g, r = cv2.split(img)

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

cv2.imshow(“Merge”, m)

python数字图像处理入门(跟我学Python图像处理获取图像属性)(11)

同时,可以提取图像的不同颜色,提取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()

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

python数字图像处理入门(跟我学Python图像处理获取图像属性)(12)

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

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])

python数字图像处理入门(跟我学Python图像处理获取图像属性)(13)

红色通道修改方法与上面类似。

希望文章对大家有所帮助,如果有错误或不足之处,还请海涵。

该系列在github所有源代码:

  • https://github.com/eastmountyxz/ImageProcessing-Python

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

华为云博客_大数据博客_AI博客_云计算博客_开发者中心-华为云

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页