OpenCV的使用

  • 前言
  • 一、OpenCV、图片二值化、图片的腐蚀膨胀学习
  • 二、使用
    • 1.引入库
    • 2.读取图片
    • 3.对图片进行腐蚀
    • 4.获取矩形框
    • 5.对图片进行裁剪
    • 完整代码
  • 三、最终效果

前言

最近老师给了我一些图片,让我按照每张图片内的矩形框进行截图,图片量不是很大,但是自己有点懒,不想用PS去一张一张的截图,于是就去学习了一下OpenCV的使用,用代码进行截图


一、OpenCV、图片二值化、图片的腐蚀膨胀学习

还是不做过多赘述,我也是看着他人的博客学习的,以下是我看的文章的链接:

  1. opencv-python 函数总览(初版)
  2. OpenCV–Python
  3. 图像腐蚀与图像膨胀(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,图片是老师给的,我也不知道可不可以发出来,就画了一下,不过不影响代码效果的演示
原图:

结果:

学习之路(二):按照图片内矩形框进行裁剪相关推荐

  1. python 剑指offer 学习之路(二)

    剑指offer 学习之路 合并两个排序的链表 树的子结构 顺时针打印矩阵 包含min函数的栈 从上往下打印二叉树 二叉搜索树的后序遍历序列 二叉树中和为某一值的路径 复杂链表的复制 数组中出现次数超过 ...

  2. 前端Vue学习之路(二)-Vue-router路由

    Vue学习之路 (二) Vue-router(基础版) 一.增加静态路由 二.动态路由+路由嵌套+404页面 三. 编程式导航 四.命名路由 五.命名视图 六.重定向和起别名 1.重定向 2.起别名 ...

  3. Hive学习之路(二):Hive表操作详讲

    操作内容简介 一.操作前的准备 二.Hive表操作详讲 1. 创建数据库 2. 查看所有数据库/表 3. 在Hive上直接操作HDFS 4. 在Hive上直接执行终端命令 5. 创建数据表/查看表的信 ...

  4. 深度学习CTPN+CRNN模型实现图片内文字的定位与识别(OCR)

    1:样本获取 **算法论文:** Synthetic Data for Text Localisation in Natural Images Github: https://github.com/a ...

  5. zigbee学习之路(二)点亮LED

    一.前言 今天,我来教大家如何点亮led,这也是学习开发板最基础的步骤了. 二.原理分析 cc2530芯片跟虽然是51的内核,但是它跟51单片机还是有区别的,51单片机不需要对IO口进行配置,而cc2 ...

  6. [原创]java WEB学习笔记71:Struts2 学习之路-- struts2常见的内建验证程序及注意点,短路验证,非字段验证,错误消息的重用...

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. python学习之路二

    数据类型: int   整型 数字进制转化函数: bin(10) "0b1010"  将十进制的10 转换成二进制 oct(10) "0o12"将十进制的10 ...

  8. Spring Boot 学习之路二 配置文件 application.yml

    一.创建配置文件 如图所示,我们在resources文件夹中新建配置文件application.yml 结构图 二.一些基本配置 server: port: 8090 //配置端口session-ti ...

  9. C++学习之路二:C++

    目录 二.C++ 1. C,java,C++区别 2. C++ 对象模型(C++ class底层原理) 2.1 基本对象模型与C++对象模型 2.2 C++ 构造函数模型 2.3 C++继承的底层原理 ...

最新文章

  1. 制作欧比旺·克诺比逼真的CG角色学习教程
  2. CTFshow 命令执行 web34
  3. Centos7.x 升级svn版本到指定版本
  4. [html] 使用递归时应该注意哪些问题?
  5. Python:random库使用方法
  6. Oracle 实例恢复时 前滚(roll forward) 后滚(roll back) 问题
  7. 案例-三角形(CSS3)
  8. Flink实现异步IO实战
  9. java模拟器vivo_vivo X3t驱动下载
  10. AlphaGo 原理讲解(附代码)
  11. 【每日早报】2019/08/19
  12. ib网卡命令_IB交换机配置命令总结
  13. 高等数学复习之空间解析几何
  14. ios15验证失败因为你不在连接互联网
  15. 家里蹲大学数学杂志官方网站
  16. 计算机应用基础(本)第4章答案,计算机应用基础第4章习题答案(江西省三校生).doc...
  17. 【计算机组成原理-chapter1】计算机组成原理概述
  18. 统计学中基础概念说明
  19. Java 8 函数式的思考
  20. 东鹏饮料财务总监刘丽华辞职:身价达1.6亿元,仍任副总裁、董秘

热门文章

  1. Newman+Jenkins实现接口自动化测试
  2. 电源层和地线层完整性规则_PCB板布线的规则和技巧
  3. 转载 C++名库介绍
  4. windows下Git与GitHub的安装及建仓基本操作
  5. 数据仓库和数据集市的区别与联系
  6. 【路径规划】基于遗传算法实现物流中心配送方案matlab源码
  7. 一文读懂网关中间件-Nginx
  8. 程序员理财小白入门 — 什么是基金?
  9. 坚果PRO3搭载Android,坚果pro3,一个锤子手机老用户的不客观使用体验
  10. active 工作流