Python中切分图片的操作是怎样
Admin 2022-08-12 群英技术资讯 294 次浏览
之前下载来zip包的漫画,里面的图片都是两张一起的:
但是某些漫画查看软件不支持自动分屏,看起来会比较不舒服,所以只能自己动手来切分。
Python有不少的库支持图片操作,其中比较著名的一个是OpenCV。
OpenCV是一个跨平台的计算机视觉库,Python下有它的接口实现。
Python默认不带OpenCV,所以需要先用pip下载:
OpenCV功能强大,这里用来做图片的切分其实是牛刀小试。
关于OpenCV的功能,这里不多介绍,有兴趣的可以找其它的资料。
为了在代码中使用OpenCV,首先需要import相关的库:
import cv2 # Should be install independently.
然后是读取图片:
img1 = cv2.imread(filename)
然后做切割:
# shape[0]:height shape[1]:width shape[2]:channel # img[y0:y1, x0:x1] 0=(left up) 1=(right low) slice1 = img[0:height, width/2:width]
这里实际上就是指定图片框体,需要的两个值是左上角和右下角坐标,只是对应的方式有些诡异,不知道为什么要这样对应。
然后是回写图片:
cv2.imwrite(getname(index1), slice1, [int(cv2.IMWRITE_PNG_COMPRESSION), 1])
此外,为了保证图片不会太大,还可以做些压缩:
img = cv2.resize(img1, (0, 0), fx=compressratio, fy=compressratio, interpolation=cv2.INTER_NEAREST)
以上就是涉及到图片的基本代码。
下面是全部的代码,将它保存到py文件中,然后与图片放到同一个目录,双击py文件就可以执行,并进行图片切分:
#!/usr/bin/env python # --------------------------------------------------------------------------------- # coding=utf-8 # @File : sliceImage.py # @Author : Jiangwei # @Date : 2020/4/18 # @Desc : Slice images. # @History : # Date Author Description # 20200418 Jiangwei Created. # @Warning: # Tested in Python 2.7. # --------------------------------------------------------------------------------- import os import sys import cv2 # Should be install independently. todir = "tmp" exts = ['.jpg', '.JPG', '.png', '.PNG'] compressratio = 0.75 def listimage(adir): ''' adir : The directory name. ''' list = [] for i in os.listdir(adir): if os.path.splitext(i)[1] in exts: list.append(os.path.join(adir, i)) return list def getname(index): page = "Image%03d.png" % index return os.getcwd() + "\\" + todir + "\\" + page def doslice(filename, index1, index2): img1 = cv2.imread(filename) img = cv2.resize(img1, (0, 0), fx=compressratio, fy=compressratio, interpolation=cv2.INTER_NEAREST) height,width = img.shape[0:2] # shape[0]:height shape[1]:width shape[2]:channel # img[y0:y1, x0:x1] 0=(left up) 1=(right low) slice1 = img[0:height, width/2:width] cv2.imwrite(getname(index1), slice1, [int(cv2.IMWRITE_PNG_COMPRESSION), 1]) print getname(index1) slice2 = img[0:height, 0:width/2] cv2.imwrite(getname(index2), slice2, [int(cv2.IMWRITE_PNG_COMPRESSION), 1]) print getname(index2) return if __name__ == "__main__": ''' Slice images. ''' # Temperature directory for sliceped images. if not os.path.exists(todir): os.mkdir(todir) # Transverse all files and do the slice. imagelist = listimage (os.getcwd()) index = 1 for i in imagelist: print "Processing %s" % i doslice(i, index, index + 1) index += 2
切分之后的文件会放到新创建的tmp目录下。
下面是切换之后的效果:
代码写得不怎么样,不过能够用......
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
下面是四种Python逐行读取文件内容的方法, 并分析了各种方法的优缺点及应用场景,以下代码在python3中测试通过, python2中运行部分代码
本文主要为大家详细介绍了如何通过python实现根据文件后缀实现分类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以关注一下
这篇文章主要介绍了Python数据提取-lxml模块,lxml模块和xpath语法的关系,lxml模块的使用场景、lxml模块的安装、谷歌浏览器xpath helper插件的安装和使用等相关内容介绍,需要的朋友可以参考一下
折线图在很多图标中都有使用,本文主要介绍了Python pyecharts Line折线图的具体实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
应表会传网数物:应用层、表示层、会话层: (这三层又可以合并为应用层,这样就是五层网络协议【osi五层协议】) python '你好'.encoding('utf-8')
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008