基本的图像操作和处理

目录

1.1 PIL:Python图像处理类库

       1.1.1 图像的读取、显示和灰度图

       1.1.2 创建图像缩略图

1.2 Matplotlib

       1.2.1 绘制图像点和线

       1.2.2 图像轮廓和直方图

1.3 Numpy

       1.3.1 灰度变化

       1.3.2 直方图均衡化

          1.4 Scipy

       1.4.1 图像模糊

1.1 PIL:Python图像处理类库

        PIL(Python Imaging Library,图像处理类库)提供了通用的图像处理功能,以及大量有用的基本图像操作,比如图像缩放、裁剪、旋转、颜色转换等。PIL 是免费的,可以从http://www.pythonware.com/products/pil/下载。

1.1.1 图像的读取、显示和灰度图

import cv2 as cv
img_path = "R-C.jpg"   #图片路径
img = cv.imread(img_path)       #以BGR三通道读取图片数据
img_gray = cv.imread(img_path,cv.IMREAD_GRAYSCALE)  #以灰度图像的形式获取图像(二维数组)
cv.namedWindow("Image")  
cv.imshow("Image",img)      #显示RGB图像
cv.imshow("img_gray",img_gray)    #显示灰度图像
cv.imwrite("C:\\Users\\86177\\Pictures\\R-C huidu.jpg",img_gray)  #储存图片

原图和灰度图的结果分别如下图所示:

 1.1.2 创建图像缩略图

from PIL import Image
pil_im = Image.open('R-C.jpg')# 读取图像
pil_im.show()
pil_im.thumbnail((128,128))#创建128像素的缩略图
pil_im.show()

 结果如下图所示,可以看出在相同尺寸的情况下,128像素的缩略图明显要比原图像模糊的多。

                                               

 1.2 Matplotlib

Matplotlib主要的作用,是用来生成绘图,直方图,功率谱,条形图,错误图,散点图等,而Matplotlib是一个Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。

1.2.1 绘制图像点和线

# 使用matplotlib连线
from PIL import Image
from pylab import *

# 读取为列表,以便标记x、y的点.
im=array(Image.open('pic/kobe_mamba.jpg'))

imshow(im)

# 列表 包含四个点坐标
x=[100,100,400,400]
y=[200,500,200,500]

#红色叉型标出
plot(x,y,'rx')


# 连接坐标的前四个点的线
plot(x[:4],y[:4])

show()

 1.2.2 图像轮廓和直方图

from PIL import Image
from pylab import *
im = array(Image.open('gaolou.jpg').convert('L'))
re_im = Image.open('gaolou.jpg')
subplot(131)
imshow(re_im)
subplot(132)
gray()
# 不使用颜色信息
contour(im, origin='image')
# 在原点的左上角显示轮廓图像
axis('off')
axis('equal')
subplot(133)
# 直方图绘制
hist(im.flatten(), 128)
show()

输出如下:

 1.3 Numpy

Numpy是一个常用的Python科学技术库,通过它可以快速对数组进行操作,包括形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等。许多Python库和科学计算的软件包都使用Numpy数组作为操作对象,或者将传入的Python数组转化为Numpy数组,因此在Python中操作数据离不开Numpy。

1.3.1 灰度变换

from PIL import Image
import numpy as np


def img_inversion(img_path):
    image = Image.open(img_path)
    image.show()
    img = np.array(image)
    img1 = 256 - img - 1
    img = Image.fromarray(np.uint8(img1))
    img.show()
if __name__ == '__main__':
    img_path = r'gaolou.jpg'
    img_inversion(img_path=img_path)

 

 1.3.2 直方图均衡化


from PIL import Image
from numpy import *


def histeq(im, nbr_bins=256):
   #灰度图均衡化

    # 计算图像的直方图
    imhist, bins = histogram(im.flatten(), nbr_bins, normed=True)
    cdf = imhist.cumsum()
    #归一化
    cdf = 255.0 * cdf / cdf[-1]
    # 使用累积分布函数的线性插值,计算新的像素值
    im2 = interp(im.flatten(), bins[:-1], cdf)
    return im2.reshape(im.shape), cdf
imgs = Image.open('133.jpg')  # 打开原图
imgs_gray = imgs.convert('L')  # 转化为灰度图像
imgs_gray.show()  # 显示灰度图像
imgs_gray.save("huidu.jpg")
im = array(Image.open('133.jpg').convert('L'))
im2, cdf = histeq(im)
im2 = Image.fromarray(uint8(im2))
im2.show()
im2.save("junheng.jpg")

 

 1.4 Scipy

Scipy是一个用于数学、科学、工程领域的常用软件包,可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题。它用于有效计算Numpy矩阵,使Numpy和Scipy协同工作,高效解决问题。

1.4.1 图像模糊

图像的高斯模糊是非常经典的图像卷积例子。本质上,图像模糊就是将(灰度)图像 I 和一个高斯核进行卷积操作。

import cv2
img = cv2.imread('gaolou.jpg')
cv2.imshow('img', img)
img2 = cv2.GaussianBlur(img, (51,51), 0, 0)  # 可调整卷积核大小查看不同效果
cv2.imshow('imgBlur', img2)
cv2.waitKey(0)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值