• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python实现书法碑帖图片分割

    本文实例为大家分享了python实现书法碑帖图片分割的具体代码,供大家参考,具体内容如下

    一、功能实现效果

    1、选择要分割的碑帖图片

    2、选择碑帖图像分割的行与列,本例的行为:5,列为:4。如何点击“确定行列”

    3、输入对于碑帖的内容,点击“确定分割”按钮。

    4、在输出文件夹生成了单字版图片,并对应内容命名。方便集字、创作与学习。

    二、Python代码实现

    1、getimgdir.py

    import wx
    import os
    from PIL import Image
    import numpy as np
    #import wx.grid
    #import row_col
    #row_col
    #######################################################################################
    app = wx.App() #wx.App()行创建了一个应用程序对象。每个 wx 程序都需要一个 .App() 对象
    frame = wx.Frame(None, -1, '请选择待分割的图片文件') #wx.Frame()方法返回一个可以包含小部件的新窗口
    frame.SetSize(0,0,600,300) #函数设置位置和大小(x(左),y(顶部),宽度,高度)
    openFileDialog = wx.FileDialog(frame, "Open", "", "",
                       "all files (*.*)|*.*",
                        wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
    
    openFileDialog.ShowModal() #显示窗口
    src = openFileDialog.GetPath() #返回文件的完整路径(如果选择了一个)
    np.savez('dir.npz', k_a=src)
    openFileDialog.Destroy()

    2、row_col.py

    import wx
    import numpy as np
    import sys
    import time
    import os
    class MyFrame(wx.Frame):
      ClickNum = 0
      def __init__(self):   #__init__(self) 是类的初始化方法,也称构造方法,是一种特殊的魔法方法。__init__(self)在实例化后,会自动调用,而不用手动调用,所以一般把属性设置在_init__()里。
        super().__init__(parent=None,title="图像分割行数与列数",size=(500,730)) # 初始化窗口信息
        panel = wx.Panel(self)  #框架的父窗口。对于顶级窗口,这个值是None 。#创建面板
        #模块1 选择签约主体
        self.Center()
        text1 = wx.StaticText(parent=panel,id=-1,pos=(10,7),label="图像分割行数:")
        list1 = ["1","2","3","4","5","6","7","8","9","10"]
        self.combobox1=wx.ComboBox(parent=panel,id=-1,pos=(100,5),value="5",choices=list1)#wx.ComboBox 默认它的文本框是可以修改的
    
        text2 = wx.StaticText(parent=panel, id=-1, pos=(250, 7), label="图像分割列数:")
        list2 = ["1","2","3","4","5","6","7","8","9","10"]
        self.combobox2 = wx.ComboBox(parent=panel, id=-1, pos=(350, 5), value="4",choices=list2) # wx.ComboBox 默认它的文本框是可以修改的
    
        datadir = np.load('dir.npz')
        imgdir = str(datadir['k_a'])
        copybookimg = wx.Bitmap(imgdir, wx.BITMAP_TYPE_ANY)
        img = wx.Image(imgdir)
        w1,h1 = copybookimg.GetSize()
        if h1>400:
         neww1 = (400*w1)/h1
         newh1 = 400
         img2=img.Scale(int(neww1),newh1)
         img2=wx.Bitmap(img2)
         self.image = wx.StaticBitmap(panel, -1, img2,pos=(10, 90))
    
        st1 = wx.StaticText(panel, -1, "字帖内容:", pos=(10, 505))
    
    
        self.txt1 = wx.TextCtrl(panel, -1, pos=(60, 530), size=(int(13.26*1+23.5), 140), style=wx.TE_MULTILINE)
    
        #提交模块
        self.button = wx.Button(panel, -1, "确定行列", pos=(200, 40), size=(60, 30)) # 在面板上添加控件
        self.Bind(wx.EVT_BUTTON, self.OnClick, self.button) # 将回调函数与按键事件绑定
    
    
      def OnClick(self, event): # 回调函数事件
          self.button.SetLabel("提交成功") # 设置
          self.ClickNum += 1
          if self.ClickNum % 2 == 1: # 根据按下次数判断
            self.button.SetLabel("已经提交") # 修改按键的标签
            a = self.combobox1.GetValue()
            b = self.combobox2.GetValue()
            np.savez('abc.npz', k_a=a, k_b=b)
            #time.sleep(0.1)
            self.Close()
    
    
    class App(wx.App):
      def OnInit(self):
        frame = MyFrame()
        frame.Show()
        return True
    app = App()
    app.MainLoop()
    #time.sleep(2)
    #sys.exit(0)

    3、row_col_show.py

    import wx
    import numpy as np
    import threading
    import time
    from PIL import Image,ImageDraw
    def draw_line(dir,a,b):
     im = Image.open(dir)
     draw = ImageDraw.Draw(im) #实例化一个对象
     #a #行 图像的宽:im.size[0]
     #b #列 图像的高:im.size[1]
     a=int(a)
     b=int(b)
     c=im.size[0]
     d=im.size[1]
     for i in range(a):
      draw.line((0, d*(i+1)/a) + (c,d*(i+1)/a), fill=128, width=5) #线的起点和终点,线宽
     for j in range(b):
      draw.line((c*(j+1)/b,0) + (c*(j+1)/b,d), fill=128, width=6)
     return(im.save("00.jpeg"))
    
    class MyFrame(wx.Frame):
      ClickNum = 0
    
      def __init__(
          self): # __init__(self) 是类的初始化方法,也称构造方法,是一种特殊的魔法方法。__init__(self)在实例化后,会自动调用,而不用手动调用,所以一般把属性设置在_init__()里。
        super().__init__(parent=None, title="图像分割行数与列数", size=(500, 730)) # 初始化窗口信息
        panel = wx.Panel(self) # 框架的父窗口。对于顶级窗口,这个值是None 。#创建面板
        # 模块1 选择签约主体
        self.Center()
        data_a = np.load('abc.npz')
        split_row = int(data_a['k_a']) # 读取行数
        split_col = int(data_a['k_b']) # 读取列数
    
        text1 = wx.StaticText(parent=panel, id=-1, pos=(10, 7), label="图像分割行数:")
        list1 = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
        self.combobox1 = wx.ComboBox(parent=panel, id=-1, pos=(100, 5), value=str(split_row),
                       choices=list1) # wx.ComboBox 默认它的文本框是可以修改的
    
        text2 = wx.StaticText(parent=panel, id=-1, pos=(250, 7), label="图像分割列数:")
        list2 = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
        self.combobox2 = wx.ComboBox(parent=panel, id=-1, pos=(350, 5), value=str(split_col),
                       choices=list2) # wx.ComboBox 默认它的文本框是可以修改的
        datadir = np.load('dir.npz')
        imgdir = str(datadir['k_a'])
        copybookimg = wx.Bitmap(imgdir, wx.BITMAP_TYPE_ANY)
        #img = wx.Image(imgdir)
        draw_line(imgdir, str(split_row), str(split_col))
        img3 = wx.Image("00.jpeg")
        w1, h1 = copybookimg.GetSize()
        if h1 > 400:
          neww1 = (400 * w1) / h1
          newh1 = 400
          img2 = img3.Scale(neww1, newh1)
          img2 = wx.Bitmap(img2)
          self.image = wx.StaticBitmap(panel, -1, img2, pos=(10, 90))
        st1 = wx.StaticText(panel, -1, "字帖内容:", pos=(10, 505))
        for i in range(split_col):
          wx.StaticText(panel, -1, "第"+str(i+1)+"列:", pos=(10, 530+20*i))
    
        self.txt1 = wx.TextCtrl(panel, -1, pos=(60, 530), size=(13.26 * split_row + 23.5, split_col *20), style=wx.TE_MULTILINE)
    
        # 提交模块
        self.button = wx.Button(panel, -1, "确定分割", pos=(400, 650), size=(60, 30)) # 在面板上添加控件
        self.Bind(wx.EVT_BUTTON, self.OnClick, self.button) # 将回调函数与按键事件绑定
    
      def OnClick(self, event): # 回调函数事件
        self.button.SetLabel("提交成功") # 设置
        self.ClickNum += 1
        if self.ClickNum % 2 == 1: # 根据按下次数判断
          self.button.SetLabel("已经提交") # 修改按键的标签
          a = self.combobox1.GetValue()
          b = self.combobox2.GetValue()
          c = self.txt1.GetValue()
          np.savez('abc.npz', k_a=a, k_b=b, k_c=c) #k_c = c碑帖内容保存npz文件
          self.Close()
    class App(wx.App):
      def OnInit(self):
        frame = MyFrame()
        frame.Show()
        return True
    app = App()
    app.MainLoop()

    4、split_copybook.py

    # -*- coding: utf-8 -*-
    
    import wx
    import os
    from PIL import Image
    import numpy as np
    #import wx.grid
    #import row_col
    #row_col
    #######################################################################################
    data_a = np.load('dir.npz')
    src=str(data_a['k_a'])#地址
    
    
    def splitimage(src, rownum, colnum, dstpath): #分割图像,(输入图片路径,分割行数,分割列数,输出图片路径)
    
      img = Image.open(src)
      src=src.replace('jpg','jpeg')
    
      print(src)
      #os.getcwd()
      w, h = img.size
      if rownum = h and colnum = w:
        print('原碑帖图片信息: %sx%s, %s, %s' % (w, h, img.format, img.mode))
        print('

    5、main.py

    import os
    os.system("python ./getimgdir.py")
    os.system("python ./row_col.py")
    os.system("python ./row_col_show.py")
    os.system("python ./split_copybook.py")
    os.unlink('00.jpeg')
    os.unlink('abc.npz')
    os.unlink('dir.npz')

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

    您可能感兴趣的文章:
    • python opencv实现图片旋转矩形分割
    • python实现对任意大小图片均匀切割的示例
    • python opencv将表格图片按照表格框线分割和识别
    • python实现图片中文字分割效果
    • python3 实现对图片进行局部切割的方法
    • Python+opencv 实现图片文字的分割的方法示例
    • python3 实现验证码图片切割的方法
    • python实现图片九宫格分割
    • Python切割图片成九宫格的示例代码
    • python切割图片的示例
    上一篇:python实现碑帖图片横向拼接
    下一篇:opencv实现回形遍历像素算法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    python实现书法碑帖图片分割 python,实现,书法,碑帖,图片,