#目的为记录在自己运行时存在的问题及解决方法,本文基于CSDN社区的Eastmount大佬的课程,通过学习,其中也增加了自己的考量和问题的解决。
一、获取图像属性
- 采用shape关键字输出图片的“形状”,包括行数、列数和通道数,灰度图只有行数和列数。
import cv2
import numpy
#读取图片
img = cv2.imread("C:/Users/CLH/Desktop/test1.JPG",cv2.IMREAD_UNCHANGED)
#获取图像形状
print(img.shape)
#结果
(768, 1024, 3)
- 通过size关键字获取像素数目,其值就等于行数×列数 ×通道数
#获取图像像素数目
print(img.size)
#结果
2359296
- 通过dtype关键字获取图像的数据类型,通常返回uint8。
#获取图像类型
print(img.dtype)
#结果
uint8
二 、ROI区域(Region of Interest)表示感兴趣区域,可以随意选取、操作。
- 显示图像在 [300:500 , 600:800] 范围的区域
import cv2
import numpy
#读取图片
img = cv2.imread("C:/Users/CLH/Desktop/test1.JPG",cv2.IMREAD_UNCHANGED)
#显示ROI区域
window = img[300:500,600:800]
cv2.imshow("123",window)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
2. 可以将提取的区域融合进原图
window = img[300:500,600:800]
img[100:300,300:500] = window
cv2.imshow("test", img)
三、图像通道处理
zeros函数的作用为返回来一个给定形状和类型的用0填充的数组;
- 通道拆分
#方法一 直接拆分
b = img[:, :, 0]
g = img[:, :, 1]
r = img[:, :, 2]
#方法二 利用split函数
b, g, r = cv2.split(img)
例子:
由于拆分后不再具有三个通道,单纯的一个通道的值表现出的就是灰度图像。
import cv2
import numpy
#读取图片
img = cv2.imread("C:/Users/CLH/Desktop/test1.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()
2. 获取蓝色通道图
利用merge函数合并通道
import cv2
import numpy
#读取图片
img = cv2.imread("C:/Users/CLH/Desktop/test1.JPG",cv2.IMREAD_UNCHANGED)
# 拆分通道
b, g, r = cv2.split(img)
# 获取图像的行、列及通道数
rows, cols, chn = img.shape
# 将g、r通道替换为等行列数的0矩阵,并使其与img数据类型一致
g = numpy.zeros((rows,cols),dtype=img.dtype)
r = numpy.zeros((rows,cols),dtype=img.dtype)
# 利用merge合并通道
test = cv2.merge([b,g,r])
# 显示蓝色通道图像
cv2.imshow("B", test)
# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()