欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-31 11:39:51
一、获取图像属性1.获取图像的形状通过shape关键字获取图像的形状,返回一个包含行数、列数、通道数的元组。其中灰度图像返回行数和列数,彩色图像返回行数、列数和通道数。代码如下:import cv2import numpy#读取图像img = cv2.imread(r"C:/Users/Administrator/osn/pic/ceshi1.jpg")#创建窗口cv2.namedWindow("Image")#在窗口显示图像cv2.imshow("Image", img...

一、获取图像属性

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系列学习】三、图像属性以及通道处理                        【openCV-python系列学习】三、图像属性以及通道处理

(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系列学习】三、图像属性以及通道处理      【openCV-python系列学习】三、图像属性以及通道处理     【openCV-python系列学习】三、图像属性以及通道处理

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

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

 注意,因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系列学习】三、图像属性以及通道处理

 

同时,可以提取图像的不同颜色通道,提取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系列学习】三、图像属性以及通道处理

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

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

 


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

 

 

本文地址:https://blog.csdn.net/weixin_42120561/article/details/107193047