复印身份证所引发的一系列问题与思考
0.背景
最近,准备一些材料的时候,需要用到身份证的正反面复印件。将一张卡的正反面复印到一面纸上,从来都是挺抓狂的事情。因为记不住复印完一面后,纸张是以什么样的位置放进打印机,而另一面又该怎么摆放。所以,总是喊同事帮我复印,然而,她很简单粗暴地在一张纸的正反面,分别复印身份证的正反面。不过,同事给我提供了一个方便日后复印的方法,她建议我把身份证扫描一份,电子扫描件存在电脑里,这样以后就可以直接打印了。
我很愉快地听从她的建议,扫描我的身份证去了。然而,又一个问题出现了,扫描完成后,保存的是一个pdf文件,里面有两页,分别是我第一次扫描的身份证正面和第二次扫描的反面。如下图所示:
这个时候,我的问题从“复印身份证正反面的技巧”变成了“如何将两页pdf合并为一页”。为此,我去下载了一个pdf编辑器,它提供了能够在页面上插入图片的功能。我试图将身份证反面的截图插入到第一页的右侧,操作成功了。但我打印出来一看,由于反面我是以截图的形式插入的,显得特别模糊。这个尝试以失败告终。
我又转念想,那么就不勉强将正反面合成一页pdf了,在打印的时候通过“布局”,一张纸上打印两页的内容不就好了。结果打印出来一看,图片被缩小了,不是1:1的比例了。
1.opencv操作图片
由于我最近一直在使用opencv处理图片,我突然想到,完全可以用opencv来实现我当前的需求。我可以将这个pdf另存为两张图片,然后通过截取图2的右上区域,填到图1的右上区域。这是opencv里非常基本的操作,却一下子解决了一个令我头疼的问题。我是用的是opencv-python,代码如下:
import cv2from_folder = '/Users/rinka/Desktop/' front_img = cv2.imread(from_folder+'id-card-front.png') back_img = cv2.imread(from_folder+'id-card-back.png') h, w, c = front_img.shaperoi_back_img = back_img[0:h//2:, w//2:, :] front_img[0:h//2:, w//2:, :] = roi_back_img cv2.imwrite(from_folder+'id-card-all-in-one.png', front_img)
2.图片的基本概念
我们日常看到的彩色图片,转换到numpy里,就是一个三维数组。第一维和第二维通过行、列索引来操作图片上的像素点,第三维是通道,常见的为RGB三通道。我们通过行、列索引的切片操作来截取图片中的某块区域,这块区域被形象地成为ROI(region of interest),翻译过来就是“感兴趣的区域”。
上面的场景中,我感兴趣的区域就是图2的右上区域,也就是印着我身份证反面的区域。对于行索引的切片范围,即0~图片高度的一半;对于列索引的切片范围,即图片宽度的一半~图片宽度。而对于图1,我要修改的区域也是页面的右上区域。于是,修改图1的这部分区域的像素值为图2的ROI。
3.感悟
学习技术,最终目的还是为了改变生活,让生活变得更加便利,将人从重复性工作中解救出来,去做更有创造力的事情。人们通过各种技术的排列组合,创造了各种各样的工具。但当有时候,现成工具无法满足当前的需求,应该从寻找工具里抽离出来,从更底层去考虑怎么通过自己已知的技术,去解决这个问题。工具虽然便利,但不要被工具所困。
转载于:https://www.cnblogs.com/rinka/p/use_opencv_to_combine_two_image.html
复印身份证所引发的一系列问题与思考相关推荐
- druid抛出的异常------javax.management.InstanceAlreadyExistsException引发的一系列探索
druid抛出的异常------javax.management.InstanceAlreadyExistsException引发的一系列探索 参考文章: (1)druid抛出的异常------jav ...
- iOS回顾笔记( 02 ) -- 由九宫格布局引发的一系列“惨案”
iOS回顾笔记( 02 ) -- 由九宫格布局引发的一系列"惨案" 前言(扯几句淡先) 回顾到学习UI过程中的九宫格布局时,发现当时学的东西真是不少. 这个阶段最大的特点就是:知识 ...
- python中global的使用_PYTHON中使用GLOBAL引发的一系列问题
In [96]: def x(): b = 12 def y(): global a,b a = 1 b = 2 y() print "b =",b ....: In [97]: ...
- Centos 6或7系统 从Kernel panic – not syncing: Attempted to kill init 故障引发的一系列操作
Centos 6或7系统 从Kernel panic – not syncing: Attempted to kill init 故障引发的一系列操作 Step1 问题描述 Step2 故障处理 St ...
- mysql 5.7.18 Can't change dir to引发的一系列问题(初始化data、改root密码)
mysql忘记root密码需要修改root密码时,使用命令窗口输入mysqld -nt -skip-grant-tables,提示: mysqld: Can't change dir to 'c:\P ...
- 用公司复印机自助复印身份证技巧
对于没有用过复印机的同事来说,第一次复印身份证总会出现复印不清晰的情况. 对于用身份证原件进行复印的情况,要把画质选项设置为照片,这样复印出来的身份证就会很清晰. 对于用身份证复印件进行复印的情况,则 ...
- mysql排序规则引发的一系列问题
文章目录 mysql排序规则引发的一系列问题 背景 mysql默认的排序方式 mysql默认排序真的是按照主键进行排序的吗? 如何随机获取更优? mysql排序规则引发的一系列问题 背景 项目中提出需 ...
- 关于考试作弊引发的关于诚信的思考
关于考试作弊引发的关于诚信的思考 学生考试作弊,我觉得,三分是因为学生的人品中可能有一些潜在的品质不够好,正在被环境诱导成为显性并可能开始逐渐稳定下来.外界的压力这么大,所以他们也很无奈.所以说三分是 ...
- 关于馒头血案引发的法律相关的思考
关于馒头血案引发的法律相关的思考 在近段时间,无论是网络.电视.报纸等等各种可见的媒体上都引发了一场大讨论,就是针对最近胡戈在以陈凯歌的<无极>为蓝本进行重新剪辑的<一个馒头引发的血 ...
- 打印机复印身份证方法
第一步:将身份证放置在A4尺寸的中间,正面向下,点击"复印"按钮-->数字1""-->"开始" 第二步:将打印出的纸张,重新放入 ...
最新文章
- ios app的真机调试与发布配置
- 威驰fs高配和低配有什么区别_“电子手刹”和“机械手刹”的区别有多大?很多车主不清楚...
- elasticsearch中文分词器ik-analyzer安装
- 堆和栈的概念和区别 python_堆和栈的区别是啥?
- go ip过滤_用Go实现自己的爬虫
- 心得体会:分治法 || 做题也有模板
- 李迟2021年11月知识总结
- android5.0+art模式,Android 5.0有哪些变化
- 《那些年啊,那些事——一个程序员的奋斗史》——26
- 用示波器对单片机I2C时序进行图形波形分析的试验小结
- Python多线程学习资料1
- Linux下C语言编程(1):IO编程
- cad打开a3样板图形_CAD中怎样设置A3图纸模板
- 2021年广东省安全员A证第三批(主要负责人)考试内容及广东省安全员A证第三批(主要负责人)新版试题
- 计算机概论读后感,电子商务概论读后感.doc
- 远程桌面无法复制粘贴问题
- android id设备认证失败,教大家Apple ID验证失败发生未知错误的解决方法
- 火车采集器html规则,火车头采集器代码过滤方法
- 零基础“复刻”经典飞机大战小程序游戏【一篇文使用 IVX 轻松实战5】
- 如何淡化疤痕留下的黑色色素
热门文章
- python 当天零点的时间戳
- 冰点还原8.53破解版
- java实现单词首字母小写转大写
- 19张网络工程师必看的思维导图
- 分享咖啡基础知识——从咖啡小白到咖啡发烧友需要了解的那些事儿!
- Django项目实战——10—(修改地址前后端逻辑、删除地址前后端逻辑、设置默认地址、修改密码、虚拟机安装docker/FastDFS、电商-商品知识、首页广告数据库表分析、商品信息数据库表分析)
- feign Ambiguous mapping 解决方式
- Vue3 Echarts散点图+高德地图+卫星地图(二)——Echarts配置散点图高德卫星地图版
- opengl介绍 webGL Open Inventor、Cosmo3D、Optimizer 3DLabs
- 2018中国服务器市场出货量年成长23%,华为出货创新高