学习之路(二):按照图片内矩形框进行裁剪
OpenCV的使用
- 前言
- 一、OpenCV、图片二值化、图片的腐蚀膨胀学习
- 二、使用
- 1.引入库
- 2.读取图片
- 3.对图片进行腐蚀
- 4.获取矩形框
- 5.对图片进行裁剪
- 完整代码
- 三、最终效果
前言
最近老师给了我一些图片,让我按照每张图片内的矩形框进行截图,图片量不是很大,但是自己有点懒,不想用PS去一张一张的截图,于是就去学习了一下OpenCV的使用,用代码进行截图。
一、OpenCV、图片二值化、图片的腐蚀膨胀学习
还是不做过多赘述,我也是看着他人的博客学习的,以下是我看的文章的链接:
- opencv-python 函数总览(初版)
- OpenCV–Python
- 图像腐蚀与图像膨胀(Python篇)
二、使用
1.引入库
from unittest import result
import cv2
import os
import numpy as np
2.读取图片
path = r"D:\Desktop\threrteen\page01.jpg"
img = cv2.imread(path,cv2.IMREAD_UNCHANGED)#我这里读取的是完整图片,因为老师给我的图片就是两通道的图片
result = img.copy()
Sp = img.shape
print(Sp)
OpenCV读取图片时,路径中不能有中文字符
3.对图片进行腐蚀
#img = cv2.imread(pic,cv2.IMREAD_UNCHANGED)
kernel = np.ones((7,7),np.uint8)#设置卷积核
erosion = cv2.erode(img,kernel)
第一步是对图片进行二值化处理,如果读取的图片不是两通道的图片需要这一步
4.获取矩形框
ret, thresh = cv2.threshold(img,20,200,cv2.THRESH_BINARY_INV)#这一步一个可以不要,是对图片进行二值化的,毕竟在腐蚀的时候就已经二值化了
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(1,1))#因为是根据矩形框进行截图,所以设置内核为矩形以及锚点的位置(不同的图片锚点位置不同,可以定义一个Mat函数获取)
eroded = cv2.erode(thresh,kernel)#腐蚀.....
contours, hierarchy = cv2.findContours(eroded,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
5.对图片进行裁剪
count = 0
color = (0,255,0)#设置绘制矩形框的RGB通道
for c in contours:x, y, w, h = cv2.boundingRect(c)if w >2000 and h>3000:print(w,h)cv2.rectangle(img, (x, y), (x + w, y + h), color, 1)#在图像上绘制一个矩形,根据绘制的矩形框进行切割count += 1temp = result[y:(y + h), x:(x + w)]# temp = cv2.bitwise_not(temp)#取反temp = cv2.resize(temp,(768,1024))#将图片统一保存为1024*768的大小cv2.imwrite(r"D:\Desktop\result\page{0}.jpg".format(count),temp)
第四步中获取图片中的矩形框时,会对所有的矩形框以及腐蚀后卫矩形框的位置都进行识别,例如文字“口”“品”都会被识别为矩形框,这时候就应该避免这种小的矩形框被裁剪,我第一次的时候就没有注意,把画矩形框和保存图片放在了循环外,还傻乎乎的运行了五分钟,删除图片的时候内心是崩溃的。
完整代码
from unittest import result
import cv2
import os
import numpy as nppath = r"D:\Desktop\threrteen\page01.jpg"
img = cv2.imread(path,cv2.IMREAD_UNCHANGED)
result = img.copy()
Sp = img.shape
#print(Sp)b = bytes()kernel = np.ones((7,7),np.uint8)
erosion = cv2.erode(img,kernel)ret, thresh = cv2.threshold(img,20,200,cv2.THRESH_BINARY_INV)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(1,1))
eroded = cv2.erode(thresh,kernel)dict = {}
list = []
contours, hierarchy = cv2.findContours(eroded,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
count = 0
color = (0,255,0)
for c in contours:x, y, w, h = cv2.boundingRect(c)if w >2000 and h>3000:print(w,h)cv2.rectangle(img, (x, y), (x + w, y + h), color, 1)count += 1temp = result[y:(y + h), x:(x + w)]# temp = cv2.bitwise_not(temp)#取反temp = cv2.resize(temp,(768,1024))cv2.imwrite(r"D:\Desktop\result\page{0}.jpg".format(count),temp)
三、最终效果
emmmmm,图片是老师给的,我也不知道可不可以发出来,就画了一下,不过不影响代码效果的演示
原图:
结果:
学习之路(二):按照图片内矩形框进行裁剪相关推荐
- python 剑指offer 学习之路(二)
剑指offer 学习之路 合并两个排序的链表 树的子结构 顺时针打印矩阵 包含min函数的栈 从上往下打印二叉树 二叉搜索树的后序遍历序列 二叉树中和为某一值的路径 复杂链表的复制 数组中出现次数超过 ...
- 前端Vue学习之路(二)-Vue-router路由
Vue学习之路 (二) Vue-router(基础版) 一.增加静态路由 二.动态路由+路由嵌套+404页面 三. 编程式导航 四.命名路由 五.命名视图 六.重定向和起别名 1.重定向 2.起别名 ...
- Hive学习之路(二):Hive表操作详讲
操作内容简介 一.操作前的准备 二.Hive表操作详讲 1. 创建数据库 2. 查看所有数据库/表 3. 在Hive上直接操作HDFS 4. 在Hive上直接执行终端命令 5. 创建数据表/查看表的信 ...
- 深度学习CTPN+CRNN模型实现图片内文字的定位与识别(OCR)
1:样本获取 **算法论文:** Synthetic Data for Text Localisation in Natural Images Github: https://github.com/a ...
- zigbee学习之路(二)点亮LED
一.前言 今天,我来教大家如何点亮led,这也是学习开发板最基础的步骤了. 二.原理分析 cc2530芯片跟虽然是51的内核,但是它跟51单片机还是有区别的,51单片机不需要对IO口进行配置,而cc2 ...
- [原创]java WEB学习笔记71:Struts2 学习之路-- struts2常见的内建验证程序及注意点,短路验证,非字段验证,错误消息的重用...
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- python学习之路二
数据类型: int 整型 数字进制转化函数: bin(10) "0b1010" 将十进制的10 转换成二进制 oct(10) "0o12"将十进制的10 ...
- Spring Boot 学习之路二 配置文件 application.yml
一.创建配置文件 如图所示,我们在resources文件夹中新建配置文件application.yml 结构图 二.一些基本配置 server: port: 8090 //配置端口session-ti ...
- C++学习之路二:C++
目录 二.C++ 1. C,java,C++区别 2. C++ 对象模型(C++ class底层原理) 2.1 基本对象模型与C++对象模型 2.2 C++ 构造函数模型 2.3 C++继承的底层原理 ...
最新文章
- 制作欧比旺·克诺比逼真的CG角色学习教程
- CTFshow 命令执行 web34
- Centos7.x 升级svn版本到指定版本
- [html] 使用递归时应该注意哪些问题?
- Python:random库使用方法
- Oracle 实例恢复时 前滚(roll forward) 后滚(roll back) 问题
- 案例-三角形(CSS3)
- Flink实现异步IO实战
- java模拟器vivo_vivo X3t驱动下载
- AlphaGo 原理讲解(附代码)
- 【每日早报】2019/08/19
- ib网卡命令_IB交换机配置命令总结
- 高等数学复习之空间解析几何
- ios15验证失败因为你不在连接互联网
- 家里蹲大学数学杂志官方网站
- 计算机应用基础(本)第4章答案,计算机应用基础第4章习题答案(江西省三校生).doc...
- 【计算机组成原理-chapter1】计算机组成原理概述
- 统计学中基础概念说明
- Java 8 函数式的思考
- 东鹏饮料财务总监刘丽华辞职:身价达1.6亿元,仍任副总裁、董秘