[雪峰磁针石博客]python图像处理工具pillow opencv等练习1 旋转

简介:

对如下图片旋转

image.png

将上面图片逆时针旋转45度,90度,要求图片内容完整。

pillow

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# https://china-testing.github.io/pil1.html
# https://github.com/china-testing/python-api-tesing/blob/master/practices/pillow/rotate.py
# 项目实战讨论QQ群630011153 144081101
# CreateDate: 2018-12-26
from PIL import Image

im = Image.open("qun.jpg")
print(im.size)
im.show()


im2 = im.rotate(45)
print(im2.size)
im2.show()
im2.save("test1.jpg")

im3 = im.rotate(45, expand=True)
print(im3.size)
im3.show()
im3.save("test2.jpg")

执行结果:

(489, 594)
(489, 594)
(767, 766)

test1.jpg

test2.jpg

注意点:pillow在没有设置expand=True的情况,旋转可能会丢失部分内容。设置expand=True的情况下,则可能增大图片像素。

90度的旋转和45的类似。具体参考代码 https://github.com/china-testing/python-api-tesing/blob/master/practices/pillow/rotate.py

90度旋转在没有设置expand=True的情况下,图片也是有丢失的。

test3.jpg

另外:transpose(Image.ROTATE_90)和im.rotate(90, expand=True)的效果实际是相同。

参考资料:

https://www.toutiao.com/i6637827317458567687/

https://china-testing.github.io/python3_lib_pil.html

旋转图片更多pillow练习

把/home/andrew/code/tmp_photos2的jpg图片旋转270度,放在/home/andrew/code/tmp_photos3

参考资料:python图像处理库

要求实现的命令行界面如下:

#!sh

$ python3 rotate.py -h
usage: rotate.py [-h] [-t TYPE] [-a ANGLE] [--version] src dst

功能:旋转图片

示例: $ python3 rotate.py /home/andrew/code/tmp_photos2 /home/andrew/code/tmp_photos3 -a 270
把/home/andrew/code/tmp_photos2的jpg图片旋转270度,放在/home/andrew/code/tmp_photos3 

positional arguments:
  src         源目录
  dst         目的目录

optional arguments:
  -h, --help  show this help message and exit
  -t TYPE     文件扩展名, 默认为jpg
  -a ANGLE    旋转角度,默认为90度,方向都为逆时针。
  --version   show program's version number and exit

旋转前:

photo.jpg

旋转后

photo.jpg

需求来源: 用户拍的图片人脸未必是头在上,下巴在下面,但是人脸识别的时扶正的识别效果比较好,为此...

参考代码:

#!python
import glob
import os 
import argparse

from PIL import Image

import photos
import data_common

description = '''

功能:旋转图片

示例: $ python3 rotate.py /home/andrew/code/tmp_photos2 /home/andrew/code/tmp_photos3 -a 270
'''

parser = argparse.ArgumentParser(description=description, 
                                 formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument('src', action="store", help=u'源目录')
parser.add_argument('dst', action="store", help=u'目的目录')
parser.add_argument('-t', action="store", dest="type", default="jpg", 
                    help=u'文件扩展名, 默认为jpg')
parser.add_argument('-a', action="store", dest="angle", default=90, type=int,
                    help=u'旋转角度,默认为90度,方向都为逆时针。')
parser.add_argument('--version', action='version',
                    version='%(prog)s 1.0 Rongzhong xu 2018 04 26')
options = parser.parse_args()

data_common.check_directory(options.dst)
files = data_common.find_files_by_type(options.src, filetype=options.type)
photos.rotate(files, options.dst, options.angle)
 

上述代码依赖的部分库

参考资料

opencv

opencv的旋转比pillow复杂,不过好在有imutils辅助,具体代码参见:

https://github.com/china-testing/python-api-tesing/blob/master/practices/cv/rotate.py

本文如遇格式问题,请访问: https://china-testing.github.io/img_rotate.html

wand库旋转的参考: http://docs.wand-py.org/en/0.4.1/guide/transform.html

相关文章
|
计算机视觉 Windows Python
windows下使用python + opencv读取含有中文路径的图片 和 把图片数据保存到含有中文的路径下
在Windows系统中,直接使用`cv2.imread()`和`cv2.imwrite()`处理含中文路径的图像文件时会遇到问题。读取时会返回空数据,保存时则无法正确保存至目标目录。为解决这些问题,可以使用`cv2.imdecode()`结合`np.fromfile()`来读取图像,并使用`cv2.imencode()`结合`tofile()`方法来保存图像至含中文的路径。这种方法有效避免了路径编码问题,确保图像处理流程顺畅进行。
1629 1
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
327 63
|
11月前
|
XML 机器学习/深度学习 人工智能
使用 OpenCV 和 Python 轻松实现人脸检测
本文介绍如何使用OpenCV和Python实现人脸检测。首先,确保安装了OpenCV库并加载预训练的Haar特征模型。接着,通过读取图像或视频帧,将其转换为灰度图并使用`detectMultiScale`方法进行人脸检测。检测到的人脸用矩形框标出并显示。优化方法包括调整参数、多尺度检测及使用更先进模型。人脸检测是计算机视觉的基础技术,具有广泛应用前景。
495 10
|
机器学习/深度学习 算法 计算机视觉
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
400 7
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
|
Python
Python对PDF文件页面的旋转和切割
Python对PDF文件页面的旋转和切割
288 3
|
计算机视觉 Python
python利用pyqt5和opencv打开电脑摄像头并进行拍照
本项目使用Python的PyQt5和OpenCV库实现了一个简单的摄像头应用。用户可以通过界面按钮打开或关闭摄像头,并实时预览视频流。点击“拍照”按钮可以捕捉当前画面并保存为图片文件。该应用适用于简单的图像采集和处理任务。
814 0
python利用pyqt5和opencv打开电脑摄像头并进行拍照
|
机器学习/深度学习 人工智能 监控
利用Python和OpenCV实现实时人脸识别系统
【8月更文挑战第31天】本文将引导您了解如何使用Python结合OpenCV库构建一个简易的实时人脸识别系统。通过分步讲解和示例代码,我们将探索如何从摄像头捕获视频流、进行人脸检测以及识别特定个体。本教程旨在为初学者提供一条明晰的学习路径,帮助他们快速入门并实践人脸识别技术。
|
存储 编解码 API
python多种方法压缩图片,opencv、PIL、tinypng、pngquant压缩图片
python多种方法压缩图片,opencv、PIL、tinypng、pngquant压缩图片
1157 1
|
算法 定位技术 vr&ar
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
4003 0
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达

推荐镜像

更多