背景:

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

    在使用Flume的时候,请确保你电脑里面已经搭建好Hadoop.Hbase.Zookeeper以及Flume.本文将以最新版的Hadoop-2.2.0.Hbase-0.96.0.Zookeeper-3 ...

  2. cc32a_demo-32dk2j_cpp_纯虚函数与抽象类-txwtech

    //32dk2j_cpp_纯虚函数与抽象类cc32a_demo-txwtech//纯虚函数是用来继承用的//纯虚函数//抽象类-抽象数据类型//*任何包含一个或者多个纯虚函数的类都是抽象类//*不要/ ...

  3. MongoDB文档(二)--查询

    (一)查询文档 查询文档可以使用以下方法 # 以非结构化的方式显示所有的文档 db.<collectionName>.find(document) # 以结构化的方式显示所有文档 db.& ...

  4. WeChair项目Beta冲刺(8/10)

    团队项目进行情况 1.昨日进展    Beta冲刺第八天 昨日进展: 前后端并行开发,项目按照计划有条不絮进行 2.今日安排 前端:扫码占座功能和预约功能并行开发 后端:扫码占座后端逻辑开发,编码使用 ...

  5. TCP端口扫描类型-隐蔽扫描和僵尸扫描

    TCP扫描有三种类型:全连接扫描,隐蔽扫描,僵尸扫描.全连接扫描无须赘述. 隐蔽扫描:发送完SYN数据包以及收到SYN/ACK数据包后不再发送SCK数据包,由于没有建立完整的TCP连接,所以在目标主机 ...

  6. 题解 - 【NOI2015】维修数列

    题面大意: 使用平衡树维护一个数列,支持插入,修改,删除,翻转,求和,求最大和这 \(6\) 个操作. 题意分析: Splay 裸题,几乎各种操作都有了,这个代码就发给大家当个模板吧. 最后求最大和的 ...

  7. 微信小程序上传Word文档、PDF、图片等文件

    <view class="main" style="border:none"> <view class="title"&g ...

  8. Eclipse中Debug时鼠标悬停不能查看变量值解决办法

    问题描述:Eclipse在Debug模式下,当鼠标移动到某个变量上面时不自动显示该变量对应的值. 解决方法:在Eclipse中点击 Window->Preferences->Java-&g ...

  9. 二.4vue展示用户数据及用户组操作以及给用户组添加额外字段

    一.用户列表 1.新建(1)views/users/index.vue: <template> <div class="user-list-container"& ...

  10. springboot集成springDataJpa

    1.引用依赖 <!--spring-data-jpa--> <dependency> <groupId>org.springframework.boot</g ...