【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区域及通道处理
谢谢大神分享!
本文地址:https://blog.csdn.net/weixin_42120561/article/details/107193047
上一篇: LINUX下编译源码时所需提前安装的常用依赖包列表
下一篇: 腾讯QQ宠物停止服务