跟我学Python图像处理丨获取图像属性兴趣ROI区域及通道
本文分享自华为云社区《〔Python图像处理〕三。获取图像属性、兴趣ROI区域及通道处理【生长吧!Python】云社区华为云》,作者:eastmount。一。获取图像属性
1。形状形状
通过shape关键字获取图像的形状,返回包含行数、列数、通道数的元祖。其中灰度图像返回行数和列数,彩色图像返回行数、列数和通道数。如下图所示:
编码:UTF8
导入简历2
导入数字
读取图片
imgcv2。imread(test。jpg,cv2。IMREADUNCHANGED)
获取图像形状
打印(图像形状)
显示图像
cv2。imshow(Demo,img)
等待显示
cv2。waitKey(0)
cv2。destroyAllWindows()
输出结果如下图所示:(445L,670L,3L),该图共445行、670列像素,3个通道。
2。像素数目大小
通过size关键字获取图像的像素数目,其中灰度图像返回行数列数,彩色图像返回行数列数通道数。代码如下:
编码:UTF8
导入简历2
导入数字
读取图片
imgcv2。imread(test。jpg,cv2。IMREADUNCHANGED)
获取图像形状
打印(图像形状)
获取像素数目
打印(图像大小)
输出结果:
(445公升,670升,3升)
894450hr3。图像类型dtype
通过dtype关键字获取图像的数据类型,通常返回uint8。代码如下:
coding:utf8
importcv2
importnumpy
读取图片
imgcv2。imread(test。jpg,cv2。IMREADUNCHANGED)
获取图像形状
print(img。shape)
获取像素数目
print(img。size)
获取图像类型
print(img。dtype)
输出结果:
(445L,670L,3L)
894450hruint8二。获取感兴趣ROI区域
ROI(RegionofInterest)表示感兴趣区域。它是指从被处理图像以方框、圆形、椭圆、不规则多边形等方式勾勒出需要处理的区域。可以通过各种算子(Operator)和函数求得感兴趣ROI区域,并进行图像的下一步处理,被广泛应用于热点地图、人脸识别、图像分割等领域。
通过像素矩阵可以直接获取ROI区域,如img〔200:400,200:400〕。
代码如下:
coding:utf8
importcv2
importnumpyasnp
读取图片
imgcv2。imread(test。jpg,cv2。IMREADUNCHANGED)
定义200100矩阵3对应BGR
facenp。ones((200,100,3))
显示原始图像
cv2。imshow(Demo,img)
显示ROI区域
faceimg〔200:400,200:300〕
cv2。imshow(face,face)
等待显示
cv2。waitKey(0)
cv2。destroyAllWindows()
输出结果如下图所示:
下面将提取的ROI图像进行融合实验,代码如下:
coding:utf8
importcv2
importnumpyasnp
读取图片
imgcv2。imread(test。jpg,cv2。IMREADUNCHANGED)
定义300100矩阵3对应BGR
facenp。ones((200,200,3))
显示原始图像
cv2。imshow(Demo,img)
显示ROI区域
faceimg〔100:300,150:350〕
img〔0:200,0:200〕face
cv2。imshow(face,img)
等待显示
cv2。waitKey(0)
cv2。destroyAllWindows()
将提取的头部融合至图像左上角部分,如下图所示:
如果想将两张图像进行融合,只需再读取一张图像即可,方法原理类似。实现代码如下:
coding:utf8
importcv2
importnumpyasnp
读取图片
imgcv2。imread(test。jpg,cv2。IMREADUNCHANGED)
testcv2。imread(test3。jpg,cv2。IMREADUNCHANGED)
定义300100矩阵3对应BGR
facenp。ones((200,200,3))
显示原始图像
cv2。imshow(Demo,img)
显示ROI区域
faceimg〔100:300,150:350〕
test〔400:600,400:600〕face
cv2。imshow(Pic,test)
等待显示
cv2。waitKey(0)
cv2。destroyAllWindows()
输出结果如下图所示:
三。图像通道处理
1。通道拆分
OpenCV读取的彩色图像由B、G、R三原色组成,可以通过下面代码获取不同的通道。
bimg〔:,:,0〕
gimg〔:,:,1〕
rimg〔:,:,2〕
也可以使用split()函数拆分通道,下面是拆分不同通道再显示的代码。
coding:utf8
importcv2
importnumpyasnp
读取图片
imgcv2。imread(test。jpg,cv2。IMREADUNCHANGED)
拆分通道
b,g,rcv2。split(img)
显示原始图像
cv2。imshow(B,b)
cv2。imshow(G,g)
cv2。imshow(R,r)
等待显示
cv2。waitKey(0)
cv2。destroyAllWindows()
输出结果如下图所示:
也可以获取不同的通道,核心代码如下所示:bcv2。split(a)〔0〕gcv2。split(a)〔1〕rcv2。split(a)〔2〕
2。通道合并
图像通道合并主要调用merge()函数实现,核心代码如下:
mcv2。merge(〔b,g,r〕)
编码:UTF8
导入简历2
将numpy导入为NP
读取图片
imgcv2。imread(test。jpg,cv2。IMREADUNCHANGED)
拆分通道
b,g,rcv2。split(img)
合并通道
mcv2。merge(〔b,g,r〕)
cv2。imshow(Merge,m)
等待显示
cv2。waitKey(0)
cv2。destroyAllWindows()
输出结果如下:
注意,如果是合并〔r,g,b〕三通道,则显示如下所示,因OpenCV是按照BGR进行读取的。
b,g,rcv2。split(img)
mcv2。merge(〔r,g,b〕)
cv2。imshow(Merge,m)
同时,可以提取图像的不同颜色,提取B颜色通道,G、B通道设置为0,则显示蓝色。代码如下所示:
coding:utf8
importcv2
importnumpyasnp
读取图片
imgcv2。imread(test。jpg,cv2。IMREADUNCHANGED)
rows,cols,chnimg。shape
拆分通道
bcv2。split(img)〔0〕
gnp。zeros((rows,cols),dtypeimg。dtype)
rnp。zeros((rows,cols),dtypeimg。dtype)
合并通道
mcv2。merge(〔b,g,r〕)
cv2。imshow(Merge,m)
等待显示
cv2。waitKey(0)
cv2。destroyAllWindows()
蓝色通道输出结果如下所示:
绿色通道核心代码及输出结果如下所示:
rows,cols,chnimg。shape
bnp。zeros((rows,cols),dtypeimg。dtype)
gcv2。split(img)〔1〕
rnp。zeros((rows,cols),dtypeimg。dtype)
mcv2。merge(〔b,g,r〕)
红色通道修改方法与上面类似。
希望文章对大家有所帮助,如果有错误或不足之处,还请海涵。
该系列在github所有源代码:https:github。comeastmountyxzImageProcessingPython
点击下方,第一时间了解华为云新鲜技术
华为云博客大数据博客AI博客云计算博客开发者中心华为云