【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)

 输出:

      【openCV-python系列学习】三、图像属性以及通道处理_第1张图片                        【openCV-python系列学习】三、图像属性以及通道处理_第2张图片

(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()

输出结果:

【openCV-python系列学习】三、图像属性以及通道处理_第3张图片      【openCV-python系列学习】三、图像属性以及通道处理_第4张图片     【openCV-python系列学习】三、图像属性以及通道处理_第5张图片

也可以获取不同的通道,核心代码如下所示:
 

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-python系列学习】三、图像属性以及通道处理_第6张图片

 注意,因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()

效果图:

【openCV-python系列学习】三、图像属性以及通道处理_第7张图片

 

同时,可以提取图像的不同颜色通道,提取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()

【openCV-python系列学习】三、图像属性以及通道处理_第8张图片

同理,可以提取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()

【openCV-python系列学习】三、图像属性以及通道处理_第9张图片

同理,可以提取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系列学习】三、图像属性以及通道处理_第10张图片

 


openCV-python学习第三课,主要学习来源
[Python图像处理] 三.获取图像属性、兴趣ROI区域及通道处理
谢谢大神分享!

 

 

你可能感兴趣的:(openCV)