python使用opencv切割图片白边
作者:喝完这杯还有一箱 发布时间:2021-10-16 04:44:06
标签:python,切割图片
本文实例为大家分享了python使用opencv切割图片白边的具体代码,可以横切和竖切,供大家参考,具体内容如下
废话不多说直接上码,分享使人进步:
from PIL import Image
from itertools import groupby
import cv2
import datetime
import os
# from core.rabbitmq import MessageQueue
THRESHOLD_VALUE = 230 # 二值化时的阈值
PRETREATMENT_FILE = 'hq' # 横切时临时保存的文件夹
W = 540 # 最小宽度
H = 960 # 最小高度
class Pretreatment(object):
__doc__ = "图片横向切割"
def __init__(self, path, save_path, min_size=960):
self.x = 0
self.y = 0
self.img_section = []
self.continuity_position = []
self.path = path
self.save_path = save_path
self.img_obj = None
self.min_size = min_size
self.mkdir(self.save_path)
self.file_name = self.path.split('/')[-1]
def get_continuity_position_new(self):
img = cv2.imread(self.path)
gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh1 = cv2.threshold(gray_image, THRESHOLD_VALUE, 255, cv2.THRESH_BINARY)
width = img.shape[1]
height = img.shape[0]
self.x = width
self.y = height
for i in range(0, height):
if thresh1[i].sum() != 255 * width:
self.continuity_position.append(i)
def filter_rule(self):
if self.y < self.min_size:
return True
def mkdir(self, path):
if not os.path.exists(path):
os.makedirs(path)
def get_section(self):
# 获取区间
for k, g in groupby(enumerate(self.continuity_position), lambda x: x[1] - x[0]):
l1 = [j for i, j in g] # 连续数字的列表
if len(l1) > 1:
self.img_section.append([min(l1), max(l1)])
def split_img(self):
print(self.img_section)
for k, s in enumerate(self.img_section):
if s:
if not self.img_obj:
self.img_obj = Image.open(self.path)
if self.x < W:
return
if s[1] - s[0] < H:
return
cropped = self.img_obj.crop((0, s[0], self.x, s[1])) # (left, upper, right, lower)
self.mkdir(os.path.join(self.save_path, PRETREATMENT_FILE))
cropped.save(os.path.join(self.save_path, PRETREATMENT_FILE, f"hq_{k}_{self.file_name}"))
def remove_raw_data(self):
os.remove(self.path)
def main(self):
# v2
try:
self.get_continuity_position_new()
self.filter_rule()
self.get_section()
self.split_img()
except Exception as e:
print(self.file_name)
print(e)
finally:
if self.img_obj:
self.img_obj.close()
class Longitudinal(Pretreatment):
def get_continuity_position_new(self):
print(self.path)
img = cv2.imread(self.path)
gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh1 = cv2.threshold(gray_image, THRESHOLD_VALUE, 255, cv2.THRESH_BINARY)
width = img.shape[1]
height = img.shape[0]
print(width, height)
self.x = width
self.y = height
for i in range(0, width):
if thresh1[:, i].sum() != 255 * height:
self.continuity_position.append(i)
def split_img(self):
print(self.img_section)
for k, s in enumerate(self.img_section):
if s:
if not self.img_obj:
self.img_obj = Image.open(self.path)
if self.y < H:
return
if s[1] - s[0] < W:
return
cropped = self.img_obj.crop((s[0], 0, s[1], self.y)) # (left, upper, right, lower)
cropped.save(os.path.join(self.save_path, f"{k}_{self.file_name}"))
def main(path, save_path):
starttime = datetime.datetime.now()
a = Pretreatment(path=path, save_path=save_path)
a.main()
for root, dirs, files in os.walk(os.path.join(save_path, PRETREATMENT_FILE)):
for i in files:
b = Longitudinal(path=os.path.join(save_path, PRETREATMENT_FILE, i), save_path=save_path)
b.main()
os.remove(os.path.join(save_path, PRETREATMENT_FILE, i))
endtime = datetime.datetime.now()
print(f'耗时:{(endtime - starttime)}')
if __name__ == '__main__':
path = '你图片存放的路径'
save_path = '要保存的路径'
for _, _, files in os.walk(path):
for i in files:
main(path=os.path.join(path, i), save_path=save_path)
os.rmdir(os.path.join(save_path, PRETREATMENT_FILE))
原始图片:
结果:
来源:https://blog.csdn.net/qq_37049050/article/details/108116304
0
投稿
猜你喜欢
- Python爬虫之Scrapy环境搭建如何搭建Scrapy环境首先要安装Python环境,Python环境搭建见:https://blog.
- 前言数学建模的介绍与作用全国大学生数学建模竞赛:全国大学生数学建模竞赛创办于1992年,每年一届,已成为全国高校规模最大的基础性学科竞赛,也
- 简单实现平面的点K均值分析,使用欧几里得距离,并用pylab展示。import pylab as pl#calc Euclid squire
- 高层的期望“3个月内,我希望网站能增加X注册用户,每日的独立IP到Y,网站盈利达到Z……”作为一个团队的领袖或者产品负责人,这样的期望是根据
- 原因我们在安装第三方库时,通常使用pip或pycharm的图形界面(右下角Python版本 -> 解释器设置 -> 加号)安装在
- JSON Schema是一个用于验证JSON数据结构的强大工具, 我查看并学习了JSON Schema的官方文档, 做了详细的记录, 分享一
- python爬虫模块Request的安装在cmd中,使用如下指令安装requests:pip install requestspython爬
- Tuple概述在Python中使用元组(Tuple)存储一组信息,其特征如下:1、使用()定义元组2、元组中使用逗号 , 分割各元素;各元素
- 如何在寸土寸金的首页上使页面的价值最大化,是每个网站设计者最关心的话题。用户关注的页面长度、宽度都是有限的。宽度自不必说,一般网站都会根据自
- 近日,被同事问及一个产品列表的做法怎么实现?一个产品列表,每个产品列表后面跟一个button,这些button居右对齐。其实这个效果跟新闻列
- 什么是字典字典是Python中最强大的数据类型之一,也是Python语言中唯一的映射类型。映射类型对象里哈希值(键,key)和指向的对象(值
- 免费手机号码归属地API查询接口和PHP使用实例分享最近在做全国性的行业分类信息网站,需要用到手机号归属地显示功能,于是就穿梭于各大权威站点
- 本文实例讲述了Python全排列操作。分享给大家供大家参考,具体如下:step 1: 列表的全排列:这个版本比较low# -*-coding
- 本文实例讲述了Python装饰器原理与基本用法。分享给大家供大家参考,具体如下:装饰器:意义:在不能改变原函数的源代码,和在不改变整个项目中
- 页面加载loading效果, 这个挺好玩的!用setTimeout实现的!可以和服务端整合弄一些生成HTML或者上传文件等应用!
- 本文实例讲述了获取django框架orm query执行的sql语句实现方法。分享给大家供大家参考,具体如下:利用Django orM 可以
- Elasticsearch简介Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene&
- 这周心血来潮,翻看了现在比较流行的几个JS脚本框架的底层代码,虽然是走马观花,但也受益良多,感叹先人们的伟大……感叹是为了缓解严肃的气氛并引
- Cookie是一种小型文本文件,存储在用户计算机中,用于跟踪用户在互联网上的活动。Cookie通常由网站创建,以便记住用户的偏好和登录状态,
- 这段时间,关于asp的前途,关于asp的好坏的讨论贴,都有好些了。当然,大家的心都是好的,但是一些朋友说的话,真是让人郁闷。个人觉得,在现在