​使用 Numpy 进行图像处理的基础知识

三种方法是使用 python 库 numpy 打开图像:Matplotlib、Opencv 和 Pillow。

Matplotlib 和 Pillow 遵循 RGB,Opencv 遵循 BGR 。

安装库并导入

!pip install pillow  
!pip install matplotlib
!pip install opencv-python
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
import cv2

使用 matplotlib.pyplot 打开图像

matplotlib 的数据类型是 ndarray。

#Read image with matplotlib
plot = plt.imread('steve.jpg')
plt.imshow(plot)
​使用 Numpy 进行图像处理的基础知识
RGB图像

使用 PIL 在 Pillow 中打开图像

Pillow 的数据类型是 PIL.JpegImagePlugin.JpegImageFile

要将此数据类型转换为 ndarray 我们使用类型转换:

pillow=np.array(pillow) 

这会将图像转换为ndarray,以便在图像中进行进一步的操作。

#Read image with pillow
pillow = Image.open('steve.jpg')
plt.imshow(pillow)
​使用 Numpy 进行图像处理的基础知识

使用 cv2 库在 Opencv 中打开图像

#1 read image with opencv BGR 
opencv = cv2.imread('steve.jpg')
plt.imshow(opencv)
​使用 Numpy 进行图像处理的基础知识

背景图像

要将 OPENCV BGR 图像转换为 RGB:

im = cv2.cvtColor(opencv,cv2.COLOR_BGR2RGB)
plt.imshow(im)
​使用 Numpy 进行图像处理的基础知识

BGR 转 RGB 图像

图像的形状

open.shape #(rows columns, (rgb value(255,255,255)))

这里 235 是高度,360 是宽度,3 是表示图像中 RGB 值的通道或值。

(235, 360, 3)

对图像的操作

旋转图像

#90 degree
rotate90 = np.rot90(plot)
plt.imshow(rotate90)

#180 degree
rotate180 = np.rot90(plot, 2)
plt.imshow(rotate180)

#270 DEGREE
rotate270 = np.rot90(plot, 3)
plt.imshow(rotate270)

翻转

#updown flip
upfownflip = np.flipud(plot)
plt.imshow(upfownflip)

#leftright flip
lrflip = np.fliplr(plot)
plt.imshow(lrflip)

con = np.concatenate([lrflip,plot],axis=1)
plt.imshow(con)
​使用 Numpy 进行图像处理的基础知识
第一张图是左图,第二张图是原图

图像颜色

指定颜色,如红色、蓝色、绿色。

R B G

0 1 2

red — (1,2 ) = 0 , Green — (0,1)= 0 , Blue — (0,2)= 0

#Red image
red = plot.copy()
red[:,:,(1,2)]=0
plt.imshow(red)

#Green image
green = plot.copy()
green[:,:,(0,2)]=0
plt.imshow(green)

#Blue image
blue = plot.copy()
blue[:,:,(0,1)]=0
plt.imshow(blue)

#Concatenate the image
con1 = np.concatenate([red,green,blue],axis=1)
fig = plt.figure(figsize = (15,15))
plt.imshow(con1)
​使用 Numpy 进行图像处理的基础知识
红 绿 蓝

灰度图像

获取灰度图像有两种方法。

方法一

gray = plot.sum(2) /255*3
plt.imshow(gray,cmap= plt.get_cmap('gray'))

这里的绘图是彩色图像,plot.sum(2):这部分将沿第三轴(轴索引 2)的值相加,有效地将三个颜色通道折叠为单个通道。

/ 255 * 3:这部分将强度值标准化为 [0, 3] 范围内。除以 255 将像素值缩放到 [0, 1] 范围内,然后乘以 3 将它们缩放到 [0, 3] 范围内。

方法二

image0_gray=cv2.cvtColor(plot,cv2.COLOR_RGB2GRAY)
plt.imshow(image0_gray,cmap=plt.get_cmap('gray'))

这里,该cv2.cvtColor函数用于将原始彩色图像(plot)转换为灰度图像。第二个参数cv2.COLOR_RGB2GRAY指定从 RGB 到灰度的转换代码。此代码获取彩色图像,使用 OpenCV 将其转换为灰度,然后使用 matplotlib 和灰度颜色图显示生成的灰度图像。

​使用 Numpy 进行图像处理的基础知识
灰度图像

填充

plt.imshow(np.pad(gray,((10,20),(50,50))),cmap = plt.get_cmap('gray'))

np.pad(gray, ((10, 20), (50, 50))):这部分使用NumPy的np.pad函数为图像添加填充gray

该元组((10, 20), (50, 50))表示应向顶部添加 10 个像素,向底部添加 20 个像素,向左添加 50 个像素,向右添加 50 个像素。

直方图

plot1 = plot.reshape(-1)
plt.hist(plot1,bins=200,range=[0,255])
plt.show

reshape(-1):将原始彩色图像plot展平,将数组转换为一维数组。

bins=200:该参数指定直方图中的 bin 数量。在本例中,它设置为 200,这意味着直方图将分为 200 个 bin。

range=[0, 255]:该参数设置直方图的值范围。在本例中,它设置为 0 到 255,表示灰度图像的可能强度值。

二值图像

#Binarize
tone = (plot//64)*64
plt.imshow(tone)

plot // 64:此运算使用整数除法将原始彩色图像 ( plot) 中的每个像素值除以 64。此后,*64 步长将像素值缩放回原始强度级别,但现在量化为 64 的倍数。

#the gray image
tone2 = (gray > 4) *255
plt.imshow(tone2)
​使用 Numpy 进行图像处理的基础知识

负像

#Negative
# Assuming plot is an RGB image
image1_negative = 255 - plot
# Display the negative image
plt.imshow(image1_negative)
plt.title('Negative Image')
plt.show()
​使用 Numpy 进行图像处理的基础知识

作者:磐怼怼
来源:深度学习与计算机视觉
原文:https://mp.weixin.qq.com/s/QFAtwqF5_rlSC0gLQgVDaQ

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论