深度学习与图像处理(五)- 图像处理

目录

基本的图像操作和处理

PIL库

PIL库(python imaging library)是Python中最常用的图像处理库,它提供了很多有用的函数和类,可以帮助我们快速完成图像处理的工作。

from PIL import Image
pil_image = Image.open('test.jpg') # 打开图像,创建一个Image对象
pil_image.show() # 显示图像
pil_image.save('test.png') # 保存图像
pil_image.size # 图像的尺寸
pil_image_convert = pil_image.convert('L') # 转换图像为灰度图像

读取文件夹下所有文件并且转换文件格式为jpg

# 文件夹中所有图像文件的列表
from PIL import Image
import os

for infile in filelist:
    outfile = os.path.splitext(infile)[0] + ".jpg"
    if infile != outfile:
        try:
            Image.open(infile).save(outfile)
        except IOError:
            print("cannot convert", infile)

os.path.splitext(infile)[0]表示文件名,os.path.splitext(infile)[1]表示文件扩展名,filelist是文件列表。

outfile = os.path.splitext(infile)[0] + “.jpg”表示将文件扩展名改为jpg。

如何获取文件列表

import os
filelist = os.listdir('test') # test是文件夹名

其他操作:

pil_image.thumbnail((128,128)) # 缩略图
pil_image.rotate(45) # 旋转图像
pil_image.transpose(Image.FLIP_LEFT_RIGHT) # 左右翻转
pil_image.transpose(Image.FLIP_TOP_BOTTOM) # 上下翻转
# 裁剪图像
box = (100,100,400,400) # 左上角和右下角坐标
region = pil_image.crop(box) # 裁剪图像

# 调整图像大小
out = pil_image.resize((128,128)) # 128*128

OpenCV

OpenCV可以用于实时处理计算机视觉问题。

OpenCV 2.3.1 版本实际上提供了两个Python 接口。旧的cv 模块使用OpenCV 内部数据类型,并且从NumPy 使用起来可能需要一些技巧。新的cv2 模块用到了NumPy 数组,并且使用起来更加直观。

import cv2
im = cv2.imread('test.jpg') # 读取图像
h,w = im.shape[:2] # 获取图像的高和宽 :2表示前两个元素
cv2.imshow('image',im) # 显示图像
cv2.imwrite('test_output.png',im) # 保存图像

在openCV中,颜色空间不是RGB,而是BGR,所以在显示图像时,需要将BGR转换为RGB。

import cv2
im = cv2.imread('test.jpg')
b,g,r = cv2.split(im) # 分离图像的通道
im = cv2.merge((r,g,b)) # 合并图像的通道
im = cv2.imread('empire.jpg')
# 创建灰度图像
gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
# BGR2RGB
im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)

处理视频

OpenCV可以用于处理视频,可以从摄像头中读取视频,也可以从文件中读取视频。

import cv2

cap = cv2.VideoCapture(0) # 从摄像头中读取视频
# cap = cv2.VideoCapture('test.avi') # 从文件中读取视频
while True:
    ret,frame = cap.read() # 读取一帧
    cv2.imshow('frame',frame) # 显示一帧
    key = cv2.waitKey(10)
    if key == 27:
        break
    if key == ord(' '):
    cv2.imwrite('vid_result.jpg',frame)

cap.release() # 释放摄像头
cv2.destroyAllWindows() # 关闭窗口

while True:表示循环读取视频帧,直到按下ESC键退出程序。 cat.read()返回两个值,第一个值ret表示是否读取成功,第二个值frame表示读取的帧。

key = cv2.waitKey(10)表示等待10ms,如果在10ms内按下了键盘,则返回按键的ASCII码,否则返回-1。

key = ord(‘ ‘)表示按下空格键,将当前帧保存为vid_result.jpg。

key = 27表示按下ESC键,退出程序。

将视频读取到NumPy数组中
import cv2
import numpy as np

cap = cv2.VideoCapture(0) # 从摄像头中读取视频

frames = []

while True:
    ret,frame = cap.read() # 读取一帧
    cv2.imshow('frame',frame) # 显示一帧
    frames.append(frame)
    if cv2.waitKey(10) == 27:
        break
    frame = array(frames)

print(frame.shape) # (480, 640, 3)
print(frames.shape) # (480, 640, 3, 100)

最终得到的数组会有帧数、帧高、帧宽及颜色通道数(3 个).

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦