iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python使用opencv切割图片白边
  • 829
分享到

python使用opencv切割图片白边

2024-04-02 19:04:59 829人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

本文实例为大家分享了python使用OpenCV切割图片白边的具体代码,可以横切和竖切,供大家参考,具体内容如下 废话不多说直接上码,分享使人进步: from PIL impor

本文实例为大家分享了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))

原始图片:

结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: python使用opencv切割图片白边

本文链接: https://www.lsjlt.com/news/134679.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python使用opencv切割图片白边
    本文实例为大家分享了python使用opencv切割图片白边的具体代码,可以横切和竖切,供大家参考,具体内容如下 废话不多说直接上码,分享使人进步: from PIL impor...
    99+
    2024-04-02
  • Python Opencv实现图片切割处理
    本文实例为大家分享了Python Opencv实现图片的切割处理,供大家参考,具体内容如下 Opencv对图片的切割: 方法一: import os from PIL import ...
    99+
    2024-04-02
  • python切割图片的实现示例
    用opencv处理一下pillow也可以,但是试过有时候会把图片自动旋转180°,cv没有这个问题 import os from cv2 import cv2 def s...
    99+
    2024-04-02
  • 使用Python VTK 完成图像切割
    目录1、读取二维图片序列完成面绘制2、vtk.vtkOutlineFilter()介绍3、隐函数平面模块vtk.vtkImplicitPlaneWidget()4、vtk.vtkCl...
    99+
    2024-04-02
  • 如何使用Java实现图片切割功能
    这篇文章将为大家详细讲解有关如何使用Java实现图片切割功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下工具类package com.xudaolong.Utils;import&...
    99+
    2023-06-28
  • python怎么进行图片的定位切割
    在Python中可以使用OpenCV库来进行图片的定位和切割。下面是一个简单的示例代码:pythonimport cv2# 加载图片...
    99+
    2023-10-18
    python
  • 怎么使用Python VTK完成图像切割
    这篇文章主要介绍“怎么使用Python VTK完成图像切割”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Python VTK完成图像切割”文章能帮助大家解决问题。1、读取...
    99+
    2023-06-30
  • Python opencv应用实现图片切分操作示例
    目录说明操作说明代码切换效果说明 之前下载来zip包的漫画,里面的图片都是两张一起的: 但是某些漫画查看软件不支持自动分屏,看起来会比较不舒服,所以只能自己动手来切分。 操作说明 ...
    99+
    2024-04-02
  • python opencv旋转图片的使用方法
    目录背景原始图像:opencv函数numpy函数旋转90度参考背景 在图像处理中,有的时候会有对图片进行角度旋转的处理,尤其是在计算机视觉中对于图像扩充,旋转角度扩充图片是一种常见的...
    99+
    2024-04-02
  • 使用python将图片改为灰度图或黑白图
    目录1. 使用cv2库将图片改为灰度图2. 利用PIL库将图片改为黑白图3. 利用PIL库将图片改为灰度图使用python将图片改为灰度图或黑白图有三种方式,分别是是使用cv2库和P...
    99+
    2024-04-02
  • vue利用插件实现按比例切割图片
    本文实例为大家分享了vue利用插件实现按比例切割图片的具体代码,供大家参考,具体内容如下 1.使用插件——vueCropper 安装该插件:npm install vue-cropp...
    99+
    2024-04-02
  • 怎么在Python中使用opencv截取图片
    这篇文章将为大家详细讲解有关怎么在Python中使用opencv截取图片,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python的五大特点是什么python的五大特点:1.简单易学,开发程...
    99+
    2023-06-14
  • 基于Python实现图片一键切割九宫格的工具
    有时候发微博时候,需要裁切图片为九宫格,但是ps或者其他工具都太麻烦,这里写一个python一键切割九宫格的工具,以供大家学习和使用! 实现代码 """ 1.将一张图片填充为正方形...
    99+
    2023-03-22
    Python图片切割九宫格 Python图片 九宫格 Python九宫格
  • 怎么使用ps切片工具切图
    这篇“怎么使用ps切片工具切图”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用ps切片工具切图”文章吧。首先打开想要编...
    99+
    2023-07-02
  • python中opencv旋转图片怎么用
    这篇文章将为大家详细讲解有关python中opencv旋转图片怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。背景在图像处理中,有的时候会有对图片进行角度旋转的处理,尤其是在计算机视觉中对于图像扩充,...
    99+
    2023-06-15
  • 怎么用Python制作表白图片
    本篇内容主要讲解“怎么用Python制作表白图片”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python制作表白图片”吧!在Python中一般使用Turtle来绘制对就是之前画樱花树的那...
    99+
    2023-06-01
  • 基于Python如何实现图片一键切割九宫格工具
    本文小编为大家详细介绍“基于Python如何实现图片一键切割九宫格工具”,内容详细,步骤清晰,细节处理妥当,希望这篇“基于Python如何实现图片一键切割九宫格工具”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。实...
    99+
    2023-07-05
  • 如何使用OpenCV及Python搭建图片缩略图服务器
    如何使用OpenCV及Python搭建图片缩略图服务器,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。应用程序进程树, 默认 Poolboy 中初始化10个用于处...
    99+
    2023-06-03
  • 怎么使用Python第三方opencv库实现图像分割处理
    这篇文章主要介绍了怎么使用Python第三方opencv库实现图像分割处理的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Python第三方opencv库实现图像分割处理文章都会有所收获,下面我们一起来看...
    99+
    2023-07-02
  • OpenCV-Python使用分水岭算法实现图像的分割与提取
    目录图像分割分水岭算法waterShed函数形态学分割distanceTransform函数确定未知区域ConnectedComponents函数实战分水岭算法随着当今世界的发展,计...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作