背景:

时值疫情,作业需要在网上提交。最近老师改变了交作业方式,之前是提交完整的作业图片即可,现在需要将完整的作业图片切分成一题一题的提交,如果手动切分较麻烦,故本人写了个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切图脚本的更多相关文章

  1. Python高质量缩放切图,抗锯齿

    最近刚接触Python,以迅雷不及掩耳盗铃之势(只是迫不及待)应用到工作中去了之前用 cmd+photoshop做批量图像处理(缩放切片),在执行效率(速度)上和灵活度上有很大限制,遂转战Python ...

  2. iOS - 如何切图适配各种机型

    关于iPhone6/6+适配问题一直有争议,今天小编专门为大家整理了相关的有效方案,希望对大伙儿有帮助! 移动app开发中多种设备尺寸适配问题,过去只属于Android阵营的头疼事儿,只是很多设计师选 ...

  3. WebGIS中矢量切图的初步研究

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 在GIS领域,金字塔技术一直是一个基础性技术,WMTS规范专 ...

  4. [超级懒人最简单法]iPhone 6 plus 适配切图方法分享(转载文章)

    网络上已经有很多适配教程,可是看了半天总是半懂不懂..最后还是要综合多个教程再动动脑子动动手,最好有程序大哥帮你试一下(这得有多大的福气) 如果有跟我一样情况的: 1.       有人说用sketc ...

  5. 做一个会PS切图的前端开发

    系列链接 做一个会使用PS的前端开发 做一个会PS切图的前端开发 切图方法分类 PhotoShop从CS版本演变到现在的CC版本,切图功能发生了比较大的变化,我们可以把PhotoShop CS版本时的 ...

  6. photoshop切图介绍

    第一部分:界面设置 1.点击“文件-新建”(或者ctrl+n)打开一个新建对话框.名称可随意填写.“预设”设置为自定,“宽度”一般选择1920,“单位”选为像素.“高度”可选择为2000,“单位”选为 ...

  7. 利用PS自动切图、支持svg且支持icoMoon——再也不用四处去转格式了

    今天想导出svg格式的图片支持webFont,结果AI打不开了,文件好像损坏了,于是就想办法在PS里面导出. 网上搜索到一篇文章,腾讯的 http://isux.tencent.com/ps-phot ...

  8. 学习笔记2:前端PS切图

    前端PS切图 一.Photoshop的界面设置 二.Photoshop的基本操作 三.Photoshop的传统切图 四.Photoshop的精准切图 五.Photoshop的扩展知识 视频学习:htt ...

  9. 瓦片切图工具gdal2tiles.py改写为纯c++版本

    gdal2tiles.py是GDAL库中用于生成TMS瓦片的python代码,支持谷歌墨卡托EPSG:3857与经纬度EPSG:4326两种瓦片,输出png格式图像. gdal2tiles.py Mo ...

随机推荐

  1. linux使用组ID(SGID)共享文件

    假如你有这样一个需求,一个小组内很多成员共同研究一个项目,为了这个项目我们需要分配一个具体的目录. 所有成员都拥有该目录的使用权限,可以互相操作成员的文件及内容.而且不允许其他人查看. 现在开始操作: ...

  2. 关于mybatis使用小于号大于号出错的解决方案

    原文链接:https://blog.csdn.net/weixin_38061311/article/details/99943807 mybatis 使用的xml的映射文件, 所以里面的标签都是在& ...

  3. Jlink设置正确,但下载程序失败

    [图中reset and run]勾选后即每次·下载程序后会自动复位,不需要再在硬件上进行复位 各参数设置正确 但依然下载失败. 原因是需要重新再编译一次,因为上次设置错误,编译后目标未创建! 重新编 ...

  4. matplotlib作图一例

    知识点都在这个例子里面: plt.figure(figsize=(10,10)) for i in range(25): plt.subplot(5,5,i+1) plt.xticks([]) plt ...

  5. Pikachu的暴力破解演示-----基于表单的暴力破解

    1 首先打开XAMMP与burpsuite 2 打开游览器输入127.0.0.1:88进入pikachu,(由于我的端口有80改成88所以输入127.0.0.1:88要是没有更改80只需要输入127. ...

  6. .Net Core踩坑记:读取txt中文乱码

    迁移.net framework的项目,有块读取txt中文转码的问题,普通的不能再普通的代码,想都没想直接copy过去,也没测,结果今天就被坑了.Core是3.1版本,这是原来的代码: string ...

  7. 01MySQL内核分析-The Skeleton of the Server Code

    摘要 这个官方文档一段对MySQL内核分析的一个向导.是对MySQL一条insert语句写入到MySQL数据库的分析. 但是,对于MySQL 5.7版本来说,基本上都是写入到innodb引擎.但也还是 ...

  8. Selenium+Python调Chrome浏览器时报Traceback (most recent call last): File "C:/Users/EDZ/Desktop/selenium_demo/demo001.py", line 12, in <module>

    上次使用Selenium+Python还是好几个月前了 今天想再用一下,结果写个打开网站的小demo报错,报错如下: 检查了一下,查看报错日志,应该是chrome版本和driver版本不一致导致的. ...

  9. 学习python的基本了解

    1) 使用python打印信息,分别打印你的名字.年龄.爱好# print('wang,23,shopping')# 2)使用变量,分别打印你的名字.年龄.爱好# name='wang'# age=2 ...

  10. .NET 开源工作流: Slickflow流程引擎高级开发(七)--消息队列(RabbitMQ)的集成使用

    前言:工作流流程过程中,除了正常的人工审批类型的节点外,事件类型的节点处理也尤为重要.比如比较常见的事件类型的节点有:Timer/Message/Signal等.本文重点阐述消息类型的节点处理,以及实 ...