Python切图脚本
背景:
时值疫情,作业需要在网上提交。最近老师改变了交作业方式,之前是提交完整的作业图片即可,现在需要将完整的作业图片切分成一题一题的提交,如果手动切分较麻烦,故本人写了个python脚本实现自动切分。
程序:
import cv2
import numpy as np
img = cv2.imread('20200302092016.jpg')
rmb = np.int32(img[:, :, 2]) - np.int32(img[:, :, 0]) > 40
rmg = np.int32(img[:, :, 2]) - np.int32(img[:, :, 1]) > 40
rp = np.where(np.logical_and(rmb, rmg))
s = 0
n = 0
for i in rp[0]:
if i - s > 100:
cv2.imwrite(f'output{n}.jpg', cv2.resize(img[s:i], (0, 0), fx=0.25, fy=0.25))
n += 1
s = i
cv2.imwrite(f'output{n}.jpg', cv2.resize(img[s:], (0, 0), fx=0.25, fy=0.25))
用法:
- 第一步:在作业中题目与题目之间的间隙用红笔点上一个小点,用来标明切分位置,如图:

- 第二步:用相机将作业拍下来,注意一张图片一页,且尽量保持画面水平,因为切图是水平切的。
- 第三步:将图片传到电脑,对脚本进行必要的修改,其中:
20200302092016.jpg是图片的文件名,路径和文件名不能有中文;- 两个
40表示该点红色通道比蓝色和绿色通道大多少,如果你发现你的红点没被识别,可以适当缩小这两个值,如果把其他的点识别成红点了,可以适当调大这个值; 100表示单道题目在图片中的“高度”至少为多少,如果你发现有的题目消失了,可以适当调小这个值,但必须保证这个值大于红点在图片中的“高度”;- 四个
0.25表示输出图片是否需要放缩,0.25表示缩小为原来的4倍,如果不需要放缩可以把0.25都改为1。
- 第四步:运行脚本(需要安装Python库Numpy和OpenCV),输出的文件名以output开头的图片就是切分得到的图片。
总结:
- 图片的像素值需要转换成int32,因为原来是unsigned byte,相减后如果是负数会溢出。numpy底层是C语言实现的,所以需要考虑溢出问题。
- 对numpy数组进行逻辑与操作需要用函数
numpy.logical_and不能直接用and运算符。 numpy.where只以一个数组做参数时返回的是一个元组,元组第i个元素储存原数组中值为1的元素的第i维坐标。
Python切图脚本的更多相关文章
- Python高质量缩放切图,抗锯齿
最近刚接触Python,以迅雷不及掩耳盗铃之势(只是迫不及待)应用到工作中去了之前用 cmd+photoshop做批量图像处理(缩放切片),在执行效率(速度)上和灵活度上有很大限制,遂转战Python ...
- iOS - 如何切图适配各种机型
关于iPhone6/6+适配问题一直有争议,今天小编专门为大家整理了相关的有效方案,希望对大伙儿有帮助! 移动app开发中多种设备尺寸适配问题,过去只属于Android阵营的头疼事儿,只是很多设计师选 ...
- WebGIS中矢量切图的初步研究
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 在GIS领域,金字塔技术一直是一个基础性技术,WMTS规范专 ...
- [超级懒人最简单法]iPhone 6 plus 适配切图方法分享(转载文章)
网络上已经有很多适配教程,可是看了半天总是半懂不懂..最后还是要综合多个教程再动动脑子动动手,最好有程序大哥帮你试一下(这得有多大的福气) 如果有跟我一样情况的: 1. 有人说用sketc ...
- 做一个会PS切图的前端开发
系列链接 做一个会使用PS的前端开发 做一个会PS切图的前端开发 切图方法分类 PhotoShop从CS版本演变到现在的CC版本,切图功能发生了比较大的变化,我们可以把PhotoShop CS版本时的 ...
- photoshop切图介绍
第一部分:界面设置 1.点击“文件-新建”(或者ctrl+n)打开一个新建对话框.名称可随意填写.“预设”设置为自定,“宽度”一般选择1920,“单位”选为像素.“高度”可选择为2000,“单位”选为 ...
- 利用PS自动切图、支持svg且支持icoMoon——再也不用四处去转格式了
今天想导出svg格式的图片支持webFont,结果AI打不开了,文件好像损坏了,于是就想办法在PS里面导出. 网上搜索到一篇文章,腾讯的 http://isux.tencent.com/ps-phot ...
- 学习笔记2:前端PS切图
前端PS切图 一.Photoshop的界面设置 二.Photoshop的基本操作 三.Photoshop的传统切图 四.Photoshop的精准切图 五.Photoshop的扩展知识 视频学习:htt ...
- 瓦片切图工具gdal2tiles.py改写为纯c++版本
gdal2tiles.py是GDAL库中用于生成TMS瓦片的python代码,支持谷歌墨卡托EPSG:3857与经纬度EPSG:4326两种瓦片,输出png格式图像. gdal2tiles.py Mo ...
随机推荐
- mall
https://github.com/macrozheng mall整合OSS实现文件上传:https://blog.csdn.net/zhenghongcs/article/details/9931 ...
- Spark文档阅读之二:Programming Guides - Quick Start
Quick Start: https://spark.apache.org/docs/latest/quick-start.html 在Spark 2.0之前,Spark的编程接口为RDD (Resi ...
- tcpdump抓包工具的基本使用
为了更好的深入理解计算机网络等相关知识,例如TCP\UDP\IP等,我们就必须利用tcpdump.Wireshark等工具对网络进行分析.本篇博文主要记录一下tcpdump这个网络分析利器的一些基本使 ...
- Azure AD B2C(二)使用Azure AD B2C为ASP.NET Core 应用设置社交帐户(邮箱)登录/注册
一,引言 上次关于Azure AD B2C 讲到一些概念,有介绍到,Azure AD B2C 也是一种身份验证的解决方案,但是它运行客户使用其首选的社交,企业或者本地账户标识对应用程序和API进行单一 ...
- 三文搞懂学会Docker容器技术(上)
1,Docker简介 1.1 Docker是什么? Docker官网: https://www.docker.com/ Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2. ...
- [ C++ ] set_new_handler解析
当 operator new 中malloc返回值为0(NULL)时,表示分配内存失败(可能是因为内存不足), 此时会通过_callnewh()调用用户通过set_new_handler()设定的ne ...
- c语音学习笔记
1.学习教程参考了杨光福 android jni Android视频<JNI> http://edu.csdn.net/course/detail/3235/54186?auto_star ...
- 入门大数据---Kylin是什么?
一.Kylin是什么? Apache Kylin是一个开源的.分布式的分析型数据仓库,提供Hadoop/Spark 上的SQL查询接口及多维度分析(OLAP)能力以支持超大规模的数据,最初由eBay开 ...
- python+opencv实现图像缩放
x, y = img_.shape[0:2] img_ = cv2.resize(img_, (int(y/2), int(x/2))) 实现图像长宽缩小为原来的一半
- 重学 Java 设计模式:实战观察者模式「模拟类似小客车指标摇号过程,监听消息通知用户中签场景」
作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 知道的越多不知道的就越多 编程开发这条路上的知识是无穷无尽的, ...