【openCV-python系列学习】三、图像属性以及通道处理
一、获取图像属性
1.获取图像的形状
通过shape关键字获取图像的形状,返回一个包含行数、列数、通道数的元组。其中灰度图像返回行数和列数,彩色图像返回行数、列数和通道数。
代码如下:
import cv2
import numpy#读取图像
img = cv2.imread(r"C:/Users/Administrator/osn/pic/ceshi1.jpg")#创建窗口
cv2.namedWindow("Image")
#在窗口显示图像
cv2.imshow("Image", img)#获取图像形状
print(img.shape)#灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#img_gray = rgb2gray(img)
cv2.namedWindow("gray",2);
cv2.imshow("gray", gray)#获取图像形状
print(gray.shape)#不加下一句的话。在命令行中执行的话,则是一闪而过
cv2.waitKey (0)
输出:

(498, 748, 3)
(498, 748)
2.像素数目-size
通过size关键字获取图像的像素数目,其中灰度图像返回行数 * 列数,彩色图像返回行数 * 列数 * 通道数。代码如下:
import cv2
import numpy#读取图像
img = cv2.imread(r"C:/Users/Administrator/osn/pic/ceshi1.jpg")#获取图像形状
print(img.shape)#获取图像的大小
print(img.size)
输出结果:
(498, 748, 3)
1117512
3.图像类型-dtype
通过dtype关键字获取图像的数据类型,通常返回uint8。代码如下:
import cv2
import numpy#读取图像
img = cv2.imread(r"C:/Users/Administrator/osn/pic/ceshi1.jpg")#获取图像形状
print(img.shape)#获取图像的大小
print(img.size)#获取图像类型
print(img.dtype)
输出结果:
(498, 748, 3)
1117512
uint8
二、图像通道处理
1.通道拆分
OpenCV读取的彩色图像由B、G、R三原色组成,可以通过下面代码获取不同的通道:
# -*- coding:utf-8 -*-
import cv2
import numpy as np#读取图片
img = cv2.imread(r"C:/Users/Administrator/osn/pic/ceshi1.jpg")#拆分通道
b, g, r = cv2.split(img)#显示原始图像
cv2.imshow("B", b)
cv2.imshow("G", g)
cv2.imshow("R", r)#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果:

也可以获取不同的通道,核心代码如下所示:
b = cv2.split(img)[0]g = cv2.split(img)[1] r = cv2.split(img)[2]
2.通道合并
图像通道合并主要调用merge()函数实现,核心代码如下:
# -*- coding:utf-8 -*-
import cv2
import numpy as np#读取图片
img = cv2.imread(r"C:/Users/Administrator/osn/pic/ceshi1.jpg")#拆分通道
b, g, r = cv2.split(img)#合并通道
m = cv2.merge([b, g, r])
cv2.imshow("Merge", m)#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果:

注意,因OpenCV是按照BGR进行读取的,所以如果是合并[r,g,b]三通道,则不是显示原图:
代码:
# -*- coding:utf-8 -*-
import cv2
import numpy as np#读取图片
img = cv2.imread(r"C:/Users/Administrator/osn/pic/ceshi1.jpg")#拆分通道
b, g, r = cv2.split(img)#合并通道
m = cv2.merge([r, g, b])
cv2.imshow("Merge", m)#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
效果图:

同时,可以提取图像的不同颜色通道,提取B颜色通道,G、B通道设置为0,则显示蓝色。代码如下所示:
# -*- coding:utf-8 -*-
import cv2
import numpy as np#读取图片
img = cv2.imread(r"C:/Users/Administrator/osn/pic/ceshi1.jpg")
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()

同理,可以提取G颜色通道,R、B通道设置为0,则显示绿色。代码如下所示:
# -*- coding:utf-8 -*-
import cv2
import numpy as np#读取图片
img = cv2.imread(r"C:/Users/Administrator/osn/pic/ceshi1.jpg")
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("Merge", m)#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

同理,可以提取R颜色通道,G、B通道设置为0,则显示红色。代码如下所示:
# -*- coding:utf-8 -*-
import cv2
import numpy as np#读取图片
img = cv2.imread(r"C:/Users/Administrator/osn/pic/ceshi1.jpg")
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("Merge", m)#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

openCV-python学习第三课,主要学习来源
[Python图像处理] 三.获取图像属性、兴趣ROI区域及通道处理
谢谢大神分享!
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
