怎么利用python的opencv去除图片的白边
发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,这篇文章主要讲解了"怎么利用python的opencv去除图片的白边",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么利用python的opencv去
千家信息网最后更新 2025年01月17日怎么利用python的opencv去除图片的白边
这篇文章主要讲解了"怎么利用python的opencv去除图片的白边",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么利用python的opencv去除图片的白边"吧!
本文实例为大家分享了python使用opencv切割图片白边的具体代码,可以横切和竖切,供大家参考,具体内容如下
废话不多说直接上码,分享使人进步:
from PIL import Imagefrom itertools import groupbyimport cv2import datetimeimport 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, thresh2 = 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 thresh2[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, thresh2 = 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 thresh2[:, 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))
原始图片:
结果:
感谢各位的阅读,以上就是"怎么利用python的opencv去除图片的白边"的内容了,经过本文的学习后,相信大家对怎么利用python的opencv去除图片的白边这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
图片
白边
内容
学习
最小
路径
原始
代码
实例
宽度
就是
废话
思路
情况
文件
文件夹
文章
更多
横向
知识
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
美容院拓客软件开发
个人信息网络安全需重视
福建曙光服务器维修调试价格
静安区品牌网络技术费用是多少
昆明软件开发工具
纵向边界 网络安全
pg数据库复制
嘉定区信息网络技术报价
服务器安全区域
国税局开展网络安全周
法律网络安全观后感
医用有限元软件开发招聘广州
宁波海量软件开发
海康服务器如何进入安全模式
仙桃计算机软件开发费用
gtfo阿尔法一下载基因数据库
revit服务器怎么添加
敏捷软件开发过程的趣事
嵌入式软件开发 学什么
为了加强 网络安全 通知
软件开发工程师就业怎样品牌
网络安全漫画手抄报图片
计算机三级数据库真题
杭州萧山科技城互联网
美股ipo数据库
软件开发选择独显还是集显
网络安全阐述
国内最大网络安全公司
我的世界在线生存服务器
电子支付与网络安全试卷