0%

Python数据科学_14_Opencv图像处理基础

使用numpy生成一张图片

1
2
import numpy as np
import matplotlib.pyplot as plt
1
img1 = np.zeros((100, 100, 3))
1
2
plt.imshow(img1)
plt.show()

output_3_0_202303092117

1
2
3
# 让图片显示出紫色(255, 0, 255)
img1[:, :, 0] = 255
img1[:, :, 2] = 255
1
2
plt.imshow(img1)
plt.show()
Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).

output_5_1_202303092117

读取计算机中的图像

1
import cv2

读取彩色图像

1
img2 = cv2.imread('lena.jpg')
1
2
3
4
img2.shape
# 377: 图像的高度
# 373: 图像的宽度
# 3: B、G、R三通道(与常见的RBG三通道不同)
(377, 373, 3)

读取灰度图像

1
img3 = cv2.imread('lena.jpg', flags=cv2.IMREAD_GRAYSCALE)
1
img3.shape
(377, 373)
1
2
img4 = cv2.imread('lena.jpg', 0)
img4.shape
(377, 373)

展示图像

使用plt显示图像

1
2
3
# 在使用matplotlib进行图像的展示时,必须将图像的通道转化为RGB
plt.imshow(img2[:, :, ::-1])
plt.show()

output_17_0_202303092117

使用cv2去展示图像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 使用cv2展示图像时不需要将其转化为RGB
cv2.imshow(winname='lena', mat=img2)

# 显示图像
# delay: 表示等待的时间(ms),如果为0表示一致等待
a = cv2.waitKey(delay=0)
if a == ord('q'):
print('关闭窗口')
elif a == ord('b'):
print('返回上一步')
else:
print('继续。。。。')
# 手动销毁窗口,窗口如果是自己手动关闭,会导致内核挂掉
cv2.destroyAllWindows()
关闭窗口

opencv显示图像的操作比较繁琐,但是显示出来的图像能够监听键盘,键盘输入任何内容都会终止图像的显示,并且将输入的键盘内容对应的ASCII编码返回出来。可以引入交互。

展示一个图像的RGB三通道

1
2
3
img21 = img2.copy()
img22 = img2.copy()
img23 = img2.copy()
1
2
3
img21[:, :, 1:] = 0  # 仅保留R通道中的像素值,将其他通道的像素值令为0
img22[:, :, [0, 2]] = 0 # 仅保留G通道中的像素值,将其他通道的像素值令为0
img23[:, :, :2] = 0 # 仅保留B通道中的像素值,将其他通道的像素值令为0
1
2
3
4
5
6
plt.imshow(img21)
plt.show()
plt.imshow(img22)
plt.show()
plt.imshow(img23)
plt.show()

output_24_0_202303092117

output_24_1_202303092117

output_24_2_202303092117

-------------本文结束感谢您的阅读-------------