首页 > 编程语言 >[python][图像切割]给定手写数字图片完成数字切割

[python][图像切割]给定手写数字图片完成数字切割

时间:2023-06-20 12:23:58浏览次数:89  
标签:digit plt 切割 img python image list import 数字

import torch
import torch.nn as nn
from torchvision import transforms
from PIL import Image, ImageOps
import numpy as np
img = Image.open("QQ.png")
img

png

def CutImage(img):
  img = img.convert("L")
  threshold = 128
  img = img.point(lambda x: 0 if x > threshold else 255)
  width, height = img.size
  images = []
  images2828 = []
  in_digit = False
  left = 0
  top = height
  bottom = 0
  for x in range(width):
      has_black = False
      for y in range(height):
          pixel = img.getpixel((x, y))
          if pixel == 0:
              has_black = True
              top = min(top, y)
              bottom = max(bottom, y)
      if has_black and not in_digit:
          in_digit = True
          left = x
      if not has_black and in_digit:
          in_digit = False
          right = x
          image = img.crop((left, top, right, bottom))
          image = ImageOps.invert(image)
          images.append(image)

  for obj in images:
    if 4 * obj.size[0] <= obj.size[1]:
      zero_matrix = np.zeros((obj.size[1], 4 * obj.size[0]))
      result_matrix = np.concatenate((zero_matrix, obj, zero_matrix), axis=1)
      resized_image = Image.fromarray(result_matrix).resize((28, 28), resample=Image.Resampling.NEAREST)
      images2828.append(resized_image)
      continue
    obj = np.pad(np.asarray(obj), pad_width=20, mode='constant', constant_values=0)
    resized_image = Image.fromarray(obj).resize((28, 28), resample=Image.Resampling.NEAREST)
    images2828.append(resized_image.convert('F'))

  return images2828
image_list = CutImage(img)
image_list
[<PIL.Image.Image image mode=F size=28x28>,
 <PIL.Image.Image image mode=F size=28x28>,
 <PIL.Image.Image image mode=F size=28x28>,
 <PIL.Image.Image image mode=F size=28x28>,
 <PIL.Image.Image image mode=F size=28x28>,
 <PIL.Image.Image image mode=F size=28x28>,
 <PIL.Image.Image image mode=F size=28x28>,
 <PIL.Image.Image image mode=F size=28x28>,
 <PIL.Image.Image image mode=F size=28x28>]
import matplotlib.pyplot as plt
plt.imshow(image_list[0], cmap='gray')
plt.show()

plt.imshow(image_list[1], cmap='gray')
plt.show()

plt.imshow(image_list[2], cmap='gray')
plt.show()


标签:digit,plt,切割,img,python,image,list,import,数字
From: https://www.cnblogs.com/jinwan/p/17493298.html

相关文章

  • 【剑指 Offer】数组中重复的数字(C++_Easy_遍历/哈希/快排/原地)
    题目在一个长度为n的数组nums里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。测试样例输入:[2,3,1,0,2,5,3]输出:2或3限制2<=n<=100000题解题解一:遍历对vector容器......
  • 【Fidder网络抓包+Python爬虫】下载微信小程序视频
    首先声明本篇博客以学习为目的,侵权即删。文章目录1.Fidder抓包1.1在电脑上打开微信小程序视频播放页以及Fidder软件1.2点击视频播放按钮,并查看Fidder抓到的数据包2.Python爬虫2.1视频下载2.2视频合并2.3完整代码3.写在最后1.Fidder抓包       关于fidder软件的安......
  • Python中获取路径/文件的父目录
    本教程将讲解在Python中获取一个路径的父目录的各种方法。父目录是指高于或高于给定目录或文件的目录。例如,路径 C:\folder\subfolder\myfile.txt 的父目录是 C:\folder\subfolder。除了根目录外,每个目录都有一个父目录。1、使用 pathlib 模块的 path.parent() 方法获......
  • wxpython使用matplotlib.pyplot绘制GUI嵌入式统计图
    在使用wxpython编写GUI时,如果需要在GUI上显示统计图,这里就可以用到matplotlib.pyplot;一、首先就是导入matplotlib.pyplot模块frommatplotlib.backends.backend_wxaggimportFigureCanvasWxAggasFigureCanvasimportmatplotlib.pyplotasplt然后就需要一个容器,可以理......
  • Python中的字符串分割技巧:split方法的妙用
    Python是一种广泛使用的编程语言,提供了许多强大的字符串处理功能。其中,split方法是一项常用的技术,它可以将字符串按照指定的分隔符进行切割,使得处理文本数据变得更加简洁和高效。本文将介绍split方法的使用方法和几个实用的应用场景,帮助读者更好地掌握这一技巧。split方法的基本......
  • python爬虫学习之定制请求头
    1.在Chrome浏览器中点击右键选择“检查”命令;2.打开后选择Network;3.按下ctrl+r,在其中找到需要请求的网站,单击后选择Headers;4.得到请求头信息为:Host:www.baidu.comReferer:https://www.baidu.com/?tn=98012088_2_dg&ch=7User-Agent:Mozilla/5.0(WindowsNT10.0;WOW64)A......
  • Python学习总结之三(if语句)
    1.其实Python和C语言中的if语句是极相似的,因为if语句的职能便是判断,区别如下:(1).Python(无括号,有冒号且缩进):ifcar=='byd':print(car.upper())(2).C(有括号,无冒号且缩进无意义):if(car=="byd")printf("%s",car);2.检查是否不相等:将“==”换为"!="即可。3.比较数字......
  • 自学Python的第三天,小结一下
               作为一名计算机专业大一学生,C语言课程的学习在上半学期已然结束,一直想找个时间再开一门语言来学习,和大多数人一样因为当下python比较火也比较实用,所以就选择了这门语言。           就简单谈谈我在这两天空余时间学到的一些东西以及我的体会。首......
  • python第二次小结(章四)
    由于最近数学建模校赛即将到来,所以一直忙着磨合队内配合,因此对python的学习其实是有一点点落下了,今天抽一点时间来写这篇第四章小结。在我看来整个第四章的核心应该在for语句循环遍历。1.首先是对for语句的使用(勿忘:冒号及缩进):eg:names=['ldl','cql','xhx'] fornameinnames......
  • python字典学习(4th)
    好久没写博客了,一方面是建模校赛的开展,另一个就是随着课程的进行,难度也在不断加大,最近一直在温习功课以应对考试。话不多说,开始总结。1.字典由‘{}’包含,其中都是一些键-值对,例如:xxx={'people':'cql','age':18}2.访问值时使用xxx['people']3.添加键-值对:xxx={'people':'cql','age......