参考文章:

剪裁: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实现证件照剪裁、缩放、修改底色相关推荐

  1. Python学习---Python安装与基础1205

    1.0. 安装 1.1.1. 下载 官网下载地址:https://www.python.org/downloads/release/python-352/ 1.1.2. 配置环境变量 因为在安装的时候 ...

  2. Python学习 Python基本图形绘制

    Python学习 Python基本图形绘制 1.深入理解Python语言 2.Python蟒蛇绘制 3.turtle库的使用 4.代码调用方法分析 5.学以致用 1.深入理解Python语言 计算机技 ...

  3. Python学习-Python简介和基础入门

    1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...

  4. Python学习——Python海龟制图中的文字

    可以用海龟的write方法显示文字,代码如下: import turtle as tt.setup(600, 400) t.write("人生苦短,我用Python", font= ...

  5. Learning Python 学习Python Lynda课程中文字幕

    Learning Python 中文字幕 学习Python 中文字幕Learning Python Python–流行且易读性强的面向对象语言 - 既强大又易于学习 无论您是编程新手还是有经验的开发人 ...

  6. python学习-python学习笔记(一)python简介和基础

    1.什么是python? python是一种面向对象的,解释型的计算机语言,它的特点是语法简介,优雅,简单易学.1989年诞生,Guido(龟叔)开发. 编译型语言:代码在编译之后,编译成2进制的文件 ...

  7. Python学习之路29-序列的修改、散列和切片

    <流畅的Python>笔记. 本篇是"面向对象惯用方法"的第三篇.本篇将以上一篇中的Vector2d为基础,定义多维向量Vector. 1. 前言 自定义Vector类 ...

  8. python中的命令,python学习——python中命令行

    python中的命令行参数 python中有一个模块sys,sys.argv这个属性提供了对命令行参数的访问.命令行参数是调用某个程序时除程序名外的其他参数. sys.argv是命令行参数的列表 le ...

  9. Python学习——Python安装pil库,操作流程以及安装中出现的问题。

    0.用管理员方式打开cmd窗口. 1.跳转到python对应目录 比如: 或者直接在该路径下输入cmd直接跳转. 直接回车搞定!! 2.输入 pip install pillow安装即可 成功后提示: ...

最新文章

  1. 干货 | 一文总结旋转目标检测全面综述:论文方法与代码
  2. bzoj2002Bounce 弹飞绵羊
  3. js前端和后台数据交互-----前端传字符串,后台控制器将其转化为集合
  4. 关于SAP Spartacus ManageUnitsListComponent的一些试错
  5. postgres 把一个表的值转成另一个表的字段名_用LUT来做一个可动态配置的卷积核...
  6. Magento: 单产品(product)或者当前类别(category)最大和最小价格 Min/Max Product Price in a Category...
  7. 解决mysql中表字符集gbk,列字符集Latin1,python查询乱码问题
  8. 详解4种微服务框架接入Istio方案
  9. 网络互连与互联网知识点笔记(五)---路由器技术
  10. linux 系统 指令lis,常用Linxu系统监控命令
  11. cc语言取消引用_「初识C语言」编译过程
  12. Atitit 路由器下面的网络o多个路由器配置 因为存在多个dhcp 所以,不能网有时.. 更改主要的路由路由器 88.88 这样不能ip冲突..and 外部的的dhcp 范围... 在的
  13. logistic人口模型python代码_用Matlab程序对logistic人口模型进行拟合?
  14. 主机安全扫描入门-用Java封装Nmap
  15. python数据类型
  16. xheditor漏洞 php,xheditor默认upload.php畸形文件上传漏洞
  17. 【概率论】【笔记】【@汤家凤】【数一】【第五章】
  18. 【项目实训】实验八 数据处理
  19. python人民币美元汇率双向兑换计算
  20. 大数据分析应用领域之预测性分析

热门文章

  1. 20221204Deep Learning to Discover Coordinates for Dynamics: Autoencoders Physics Informed ML
  2. Windows Server® 2008 Enterprise 组件服务 找不到 ”Microsoft Word 97 - 2003 文档“组件
  3. Privileged instruction
  4. 胸上肌到底要怎么练啊!
  5. mysql zip 版本_MySQL zip版本安装
  6. unit自动驾驶怎么使用_高速公路开启“无人驾驶”模式,自动驾驶功能真是这么用的吗?...
  7. c语言判断一个素数能被几个9整除,判断一个素数能被几个9整除
  8. K-Means(K均值)、GMM(高斯混合模型),通俗易懂,先收藏了!
  9. 误删桌面文件如何恢复?
  10. 鸿蒙(harmonyOS)应用开发-真机设备API版本查看