python图像处理学习

获取图像属性 兴趣ROI区域及通道处理
学习打卡第二天!!!今天的我依旧优秀!!!
一 获取图像属性
1 形状shape
通过shape关键字获取图片形状,返回包含行数、列数、通道数的元组。其中灰度图片返回行数和列数,彩色图片返回行数列数和通道数;
格式:img.shape
代码训练:

import cv2
import numpy
#读取图片
img=cv2.imread("zhan.jpeg")

#shape关键字
print(img.shape)

结果如下:
(1000, 750, 3)
代表该图片有1000行,750列,3个通道;

2 像素目录size
使用size关键字获取图片像素目录,灰度图返回行数列数,彩色图片返回行数列数*通道数;
使用格式:img.size

import cv2
import numpy
#读取图片
img=cv2.imread("zhan.jpeg")

#shape关键字
print(img.shape)
#size关键字
print(img.size)

结果如下:
(1000, 750, 3)
2250000
就是10007503=2250000

3 图像类型-dtype
通过dtype来获得图像的数字类型,一般的图像数字类型是uint8

#dtype图像数字类型
print(img.dtype)

结果如下:
uint8

二 获取感兴趣ROI区域
ROI区域表示的就是被处理的图片的区域,可以通过各种形状选中显示出来,并进行下一步处理,被广泛应用于人脸识别,地图显示,图像分割等领域;
通过像素矩阵可以直接获得ROI区域,比如img[200:400,200:400]
在这里插入图片描述
代码训练:

import cv2
import numpy as np
#读取图片
img=cv2.imread("zhan.jpeg")

#定义一个图像区域,这一句我还不知到有啥用,因为有他没他结果都一样
face=np.ones((400,400,2))

#显示原始图片
cv2.imshow("dome",img)

#选中显示区域
face=img[100:400,100:300]
cv2.imshow("eg",face)

#等待时间
cv2.waitKey(0)
cv2.destroyWindow()

在这里插入图片描述
图片融合,将提取的ROI图像进行融合,就是把拿出来的小图放到提取的ROI图片里面;
代码训练

import cv2
import numpy as np
#读取图片
img=cv2.imread("zhan.jpeg")

#定义一个图像区域,这一句我还不知到有啥用,因为有他没他结果都一样
face=np.ones((400,400,3))

#显示原始图片
cv2.imshow("dome",img)

#选中显示区域
face=img[100:400,100:300]#图片显示框的大小
img[0:300,0:200]=face#里面的小一点的图的大小
cv2.imshow("eg",face)

#等待时间
cv2.waitKey(0)
cv2.destroyWindow()

演示结果:
在这里插入图片描述
两张图片进行融合,将得到的ROI图片放入新的图片的指定区域

import cv2
import numpy as np
#读取图片
img=cv2.imread("zhan.jpeg")
test=cv2.imread("3.jpg")

#定义一个图像区域,这一句我还不知到有啥用,因为有他没他结果都一样
face=np.ones((200,200,3))

#显示原始图片
cv2.imshow("dome",img)

#选中显示区域
face=img[100:300,150:350]#ROI图片的区域选择
test[100:300,150:350]=face#选择的放入ROI图片的位置
cv2.imshow("eg",test)

#等待时间
cv2.waitKey(0)

结果如下:
在这里插入图片描述
我一开始放的是一只喵咪,但是那张图片太大了,我要调整好几次都不能放到猫咪的头上,所以换了一张小的狗头;

三 图像通道处理
通道拆分通过以下方式:
b=img[,0]
g=img[,1]
r=img[,2]
在这里插入图片描述
也可以用split()函数对通道进行拆分;
代码演示:

import cv2
import numpy as np
#读取图片
img=cv2.imread("3.jpg")

#split()通道拆分
b,g,r=cv2.split(img)

#拆分的通道分开显示
cv2.imshow("B",b)
cv2.imshow("G",g)
cv2.imshow("R",r)

#等待时间
cv2.waitKey(0)

结果

在这里插入图片描述
也可以获取不同的通道值:

#分别获取不同通道的值
b=cv2.split(img)[0]
g=cv2.split(img)[1]
r=cv2.split(img)[2]
print("B",b)
print("G",g)
print("R",r)

结果如下:
B [[ 98 98 99 … 123 124 124]
[ 95 95 97 … 121 121 121]
[ 90 91 93 … 119 119 119]

[120 120 119 … 56 56 55]
[119 119 117 … 55 55 54]
[119 118 117 … 55 54 54]]
G [[123 123 124 … 147 148 148]
[120 120 122 … 145 145 145]
[115 116 118 … 143 143 143]

[126 126 127 … 86 86 85]
[125 125 125 … 85 85 84]
[125 124 125 … 85 84 84]]
R [[119 119 120 … 145 146 146]
[116 116 118 … 143 143 143]
[111 112 114 … 141 141 141]

[125 125 126 … 115 115 114]
[124 124 124 … 114 114 113]
[124 123 124 … 114 113 113]]

2 通道合并
就是将BGR拆分的通道合在一起,通常用merge()函数来实现
代码训练

import cv2
import numpy as np
#读取图片
img=cv2.imread("3.jpg")

#split()通道拆分
b,g,r=cv2.split(img)

#marge()通道合并
m=cv2.merge([b,g,r])
cv2.imshow("merge",m)

#等待时间
cv2.waitKey(0)

运行结果
在这里插入图片描述
换个合并方式r,g,b合并

#marge()通道合并
m=cv2.merge([r,g,b])
cv2.imshow("merge",m)

结果如下
在这里插入图片描述
合并的方式不一样,显示的图片效果也不一样,opencv的方式是BGR的读取方式
同时提取不同的图片颜色,可以通过设置不一样的RGB值来确定,提取蓝色就是g,r通道的值设置为0
代码训练:

import cv2
import numpy as np
#读取图片
img=cv2.imread("3.jpg")
rows, cols, chn = img.shape#图片类型行数,列数,通道数

#split()通道拆分
b=cv2.split(img)[0]
g = np.zeros((rows,cols),dtype=img.dtype)#设置G通道的图片行数列数都为0,图片类型就是原本图片类型
r = np.zeros((rows,cols),dtype=img.dtype)#同上

#marge()通道合并
m=cv2.merge([b,g,r])
cv2.imshow("merge",m)

#等待时间
cv2.waitKey(0)

结果如下
在这里插入图片描述
同理可得其他颜色:
在这里插入图片描述
在这里插入图片描述
噢啦今天就先到这里!!!
原文链接:
https://blog.csdn.net/Eastmount/article/details/82177300

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值