• 发文
  • 评论
  • 微博
  • 空间
  • 微信

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

磐创AI 2024-03-18 11:23 发文

三种方法是使用 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)

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)

RGB图像

使用 cv2 库在 Opencv 中打开图像

#1 read image with opencv BGR 

opencv = cv2.imread('steve.jpg')

plt.imshow(opencv)

背景图像

要将 OPENCV BGR 图像转换为 RGB:

im = cv2.cvtColor(opencv,cv2.COLOR_BGR2RGB)

plt.imshow(im)

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)

第一张图是左图,第二张图是原图

图像颜色

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

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)

红 绿 蓝

灰度图像

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

方法一

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 和灰度颜色图显示生成的灰度图像。

灰度图像

填充

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)

负像

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

声明:本文为OFweek维科号作者发布,不代表OFweek维科号立场。如有侵权或其他问题,请及时联系我们举报。
2
评论

评论

    相关阅读

    暂无数据

    磐创AI

    人工智能前沿技术分享。...

    举报文章问题

    ×
    • 营销广告
    • 重复、旧闻
    • 格式问题
    • 低俗
    • 标题夸张
    • 与事实不符
    • 疑似抄袭
    • 我有话要说
    确定 取消

    举报评论问题

    ×
    • 淫秽色情
    • 营销广告
    • 恶意攻击谩骂
    • 我要吐槽
    确定 取消

    用户登录×

    请输入用户名/手机/邮箱

    请输入密码