python学习 python实现证件照剪裁、缩放、修改底色
参考文章:
剪裁:https://blog.csdn.net/hfutdog/article/details/82351549
Background:学校要求上传电子证件照,大小为538*441像素
一、调整大小
既要调整比例又要缩放的要求还是有些复杂,感觉不能直接完成,于是我直接自己计算需要剪裁的像素值了。有两种方法:
1、通过Pillow
pip install image
2、通过OpenCV
pip install opencv-python
1、Pillow
from PIL import Imageinfile = 'D:\\zhengjianzhao.jpg'
outfile = 'D:\\myphoto.jpg'img = Image.open(infile)#读取图片
(x,y) = img.size #read image size
print( 'original size: ',x,y)#打印图片原始尺寸(1080*1512)
cutX=0.5*(x-1074)#1074=358*3
cutY=0.5*(y-1323)
print('cutX=',cutX,' cutY=',cutY)
img_cropped = img.crop((cutX,cutY,x-cutX,y-cutY)) # (left, upper, right, lower)
x_s = 358 #define standard width
y_s = 441 #calc height based on standard width
print('new size:',x_s,y_s)
out =img_cropped .resize((x_s,y_s),Image.ANTIALIAS) #resize image with high-quality
out.save(outfile)
2、OpenCV
import cv2
from math import floorinfile = 'D:\\zhengjianzhao.jpg'
outfile = 'D:\\myphotocv.jpg'
img = cv2.imread(infile)
y,x=img.shape[0:2]#0垂直尺度,1水平尺寸,2通道数
cv2.imshow('OriginalPicture:',img)#显示原图cutX=int(0.5*(x-1074))#1074=358*3
cutY=floor(0.5*(y-1323))#不支持小数
img_cropped = img[cutY:y-cutY,cutX:x-cutX]# 裁剪坐标为[y0:y1, x0:x1]
y1,x1=img_cropped.shape[0:2]#剪裁后的尺寸img_test=cv2.resize(img_cropped,(int(x1/3),int(y1/3)))#缩放
cv2.imshow('resize:', img_test)
cv2.waitKey()#程序显示出图片后将暂停,等待接收一个键盘输入cv2.imwrite(outfile, img_test)
cv2.waitKey()
cv2.destroyAllWindows()#关闭特定窗口
print('original size:',x,y)
print('Cropped size:',x1,y1)
print('new size:',int(x1/3),int(y1/3))
可以看出来opencv的剪裁方法img[]的参数不能是小数,所以我取了floor。获取图片尺寸时的参数顺序也不一致。
二、修改底色
import cv2
import numpy as np
from math import floorinfile = 'D:\\bluebackground.jpg'
outfile = 'D:\\changebackground.jpg'orimg=cv2.imread(infile)
rows,cols,channels = orimg.shape
cv2.imshow('original img',orimg)#剪裁缩放
cutX=int(0.5*(cols-1074))#1074=358*3
cutY=floor(0.5*(rows-1323))#不支持小数
img_cropped = orimg[cutY:rows-cutY,cutX:cols-cutX]# 裁剪坐标为[y0:y1, x0:x1]
y1,x1=img_cropped.shape[0:2]#剪裁后的尺寸img=cv2.resize(img_cropped,(int(x1/3),int(y1/3)))#缩放
cv2.imshow('resize:', img)
cv2.waitKey()#程序显示出图片后将暂停,等待接收一个键盘输入
cv2.destroyAllWindows()#关闭特定窗口#转换hsv
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#色调(H),饱和度(S),明度(V)
lower_blue=np.array([90,70,70])
upper_blue=np.array([110,255,255])#将hsv值位于区间[lower_blue,upper_blue]的部分置为255(白),位于区间外的部分置为0(黑)
mask = cv2.inRange(hsv, lower_blue, upper_blue)#黑白图像
cv2.imshow('Mask', mask)#腐蚀膨胀,去掉目标外的孤立点
erode=cv2.erode(mask,None,iterations=1)
cv2.imshow('erode',erode)
dilate=cv2.dilate(erode,None,iterations=1)
cv2.imshow('dilate',dilate)#遍历替换
x2,y2 = dilate.shape[0:2]
for i in range(x2):for j in range(y2):if dilate[i,j]==255:#背景部分为255(白)#img[i,j]=(0,0,255)#此处替换颜色,为BGR通道img[i,j]=(255,255,255)
cv2.imshow('res',img)cv2.waitKey(0)
cv2.destroyAllWindows()
就不放图片啦。
这里有一个查颜色的网址:https://www.fontke.com/tool/rgb/010001/
python学习 python实现证件照剪裁、缩放、修改底色相关推荐
- Python学习---Python安装与基础1205
1.0. 安装 1.1.1. 下载 官网下载地址:https://www.python.org/downloads/release/python-352/ 1.1.2. 配置环境变量 因为在安装的时候 ...
- Python学习 Python基本图形绘制
Python学习 Python基本图形绘制 1.深入理解Python语言 2.Python蟒蛇绘制 3.turtle库的使用 4.代码调用方法分析 5.学以致用 1.深入理解Python语言 计算机技 ...
- Python学习-Python简介和基础入门
1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...
- Python学习——Python海龟制图中的文字
可以用海龟的write方法显示文字,代码如下: import turtle as tt.setup(600, 400) t.write("人生苦短,我用Python", font= ...
- Learning Python 学习Python Lynda课程中文字幕
Learning Python 中文字幕 学习Python 中文字幕Learning Python Python–流行且易读性强的面向对象语言 - 既强大又易于学习 无论您是编程新手还是有经验的开发人 ...
- python学习-python学习笔记(一)python简介和基础
1.什么是python? python是一种面向对象的,解释型的计算机语言,它的特点是语法简介,优雅,简单易学.1989年诞生,Guido(龟叔)开发. 编译型语言:代码在编译之后,编译成2进制的文件 ...
- Python学习之路29-序列的修改、散列和切片
<流畅的Python>笔记. 本篇是"面向对象惯用方法"的第三篇.本篇将以上一篇中的Vector2d为基础,定义多维向量Vector. 1. 前言 自定义Vector类 ...
- python中的命令,python学习——python中命令行
python中的命令行参数 python中有一个模块sys,sys.argv这个属性提供了对命令行参数的访问.命令行参数是调用某个程序时除程序名外的其他参数. sys.argv是命令行参数的列表 le ...
- Python学习——Python安装pil库,操作流程以及安装中出现的问题。
0.用管理员方式打开cmd窗口. 1.跳转到python对应目录 比如: 或者直接在该路径下输入cmd直接跳转. 直接回车搞定!! 2.输入 pip install pillow安装即可 成功后提示: ...
最新文章
- 干货 | 一文总结旋转目标检测全面综述:论文方法与代码
- bzoj2002Bounce 弹飞绵羊
- js前端和后台数据交互-----前端传字符串,后台控制器将其转化为集合
- 关于SAP Spartacus ManageUnitsListComponent的一些试错
- postgres 把一个表的值转成另一个表的字段名_用LUT来做一个可动态配置的卷积核...
- Magento: 单产品(product)或者当前类别(category)最大和最小价格 Min/Max Product Price in a Category...
- 解决mysql中表字符集gbk,列字符集Latin1,python查询乱码问题
- 详解4种微服务框架接入Istio方案
- 网络互连与互联网知识点笔记(五)---路由器技术
- linux 系统 指令lis,常用Linxu系统监控命令
- cc语言取消引用_「初识C语言」编译过程
- Atitit 路由器下面的网络o多个路由器配置 因为存在多个dhcp 所以,不能网有时.. 更改主要的路由路由器 88.88 这样不能ip冲突..and 外部的的dhcp 范围... 在的
- logistic人口模型python代码_用Matlab程序对logistic人口模型进行拟合?
- 主机安全扫描入门-用Java封装Nmap
- python数据类型
- xheditor漏洞 php,xheditor默认upload.php畸形文件上传漏洞
- 【概率论】【笔记】【@汤家凤】【数一】【第五章】
- 【项目实训】实验八 数据处理
- python人民币美元汇率双向兑换计算
- 大数据分析应用领域之预测性分析
热门文章
- 20221204Deep Learning to Discover Coordinates for Dynamics: Autoencoders Physics Informed ML
- Windows Server® 2008 Enterprise 组件服务 找不到 ”Microsoft Word 97 - 2003 文档“组件
- Privileged instruction
- 胸上肌到底要怎么练啊!
- mysql zip 版本_MySQL zip版本安装
- unit自动驾驶怎么使用_高速公路开启“无人驾驶”模式,自动驾驶功能真是这么用的吗?...
- c语言判断一个素数能被几个9整除,判断一个素数能被几个9整除
- K-Means(K均值)、GMM(高斯混合模型),通俗易懂,先收藏了!
- 误删桌面文件如何恢复?
- 鸿蒙(harmonyOS)应用开发-真机设备API版本查看