获取图像的属性。
1、获取图像的形状。
a、shape 获取图像的形状。彩色图像返回包含的行数、列数、通道数的元组。
b、size 获取图像的像素数目,彩色图像返回行数*列数的值。
c、dtype 获取图像的数据类型,一般返回uint8.
实例代码:
import cv2
img = cv2.imread("img/test.jpg", cv2.IMREAD_UNCHANGED)
#获取图像形状
print(img.shape)
#显示图像
cv2.imshow("python", img)
# 获取像素数目
print(img.size)
#获取图像类型
print(img.dtype)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
获取感兴趣区域(ROI)
ROI:(Region of Interest)表示感兴趣区域。它是指从被处理图像以方框、圆形、椭圆、不规则多边形等方式勾勒出需要处理的区域。可以通过各种算子(Operator)和函数求得感兴趣ROI区域,并进行图像的下一步处理,被广泛应用于热点地图、人脸识别、图像分割等领域。
1、通过像素矩阵来获取ROI区域。
所用原图(img/test.jpg)
import cv2
import numpy as np
#读取图片
img = cv2.imread("img/test.jpg", cv2.IMREAD_UNCHANGED)
#定义200*100矩阵 3对应BGR
face = np.ones((200, 100, 3))
#显示原始图像
cv2.imshow("ceshi", img)
#显示ROI区域
face = img[200:400, 200:300]
cv2.imshow("ROI", face)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
图像通道处理
1、通道拆分
OpenCV读取的彩色图像由B、G、R三原色组成,可以通过下面代码获取不同的通道。
b = img[:, :, 0]
g = img[:, :, 1]
r = img[:, :, 2]
也可以使用split()函数拆分通道,下面是拆分不同通道再显示的代码。
实例代码:
import cv2
img = cv2.imread("img/wu.jpgtest.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 as np
#读取图片
img = cv2.imread("img/test.jpg", cv2.IMREAD_UNCHANGED)
#拆分通道
b, g, r = cv2.split(img)
#合并通道
m = cv2.merge([b, g, r])
cv2.imshow("test", m)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果:
改写以上程序;
把 m = cv2.merge([b, g, r]) 改为 m = cv2.merge([r, g, b])
运行结果如下:
原因: OpenCV是按照BGR进行读取的图像的。
3、提取图像的不同颜色。
提取b颜色通道——————g、r 通道设置为0
实例代码:
import cv2
import numpy as np
#读取图片
img = cv2.imread("img/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("test", m)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果:
提取g颜色通道——————b r 通道设置为0
实例代码:
import cv2
import numpy as np
#读取图片
img = cv2.imread("img/test.jpg", cv2.IMREAD_UNCHANGED)
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])
cv2.imshow("test", m)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果:
提取r颜色通道——————b g 通道设置为0
实例代码:
import cv2
import numpy as np
#读取图片
img = cv2.imread("img/test.jpg", cv2.IMREAD_UNCHANGED)
rows, cols, chn = img.shape
#拆分通道
b=np.zeros((rows,cols),dtype=img.dtype)
g=np.zeros((rows,cols),dtype=img.dtype)
r = cv2.split(img)[2]
#合并通道
m = cv2.merge([b, g, r])
cv2.imshow("test", m)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果: