Python opencv应用实现图片切分操作示例
作者:jiangwei0512 发布时间:2021-12-25 03:45:39
标签:Python,opencv图片切分,Python,切分图片
说明
之前下载来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目录下。
切换效果
下面是切换之后的效果:
代码写得不怎么样,不过能够用......
来源:https://blog.csdn.net/jiangwei0512/article/details/105605512


猜你喜欢
- python脚本执行的3种方法:(找到自己能够使用的方法,能用的方法就是好方法)方法一:交互模式直接执行语句交互模式下直接编写执行 Pyth
- 用来制作甘特图的专业工具也不少,常见的有:Microsoft Office Project、GanttProject、WARCHART XG
- 在默认的情况下,MySQL搜索不区分大小写(但某些字符集始终区分大小写,如czech)。这意味着,如果你使用col_name LIKE
- 单线程实现单线程实现道理比较简单,这里尝试Soket连接3389,连接成功说明端口开放,否则说明没有开远程服务。随便修改了一下就ok了,代码
- 问题一:会报错的写法: GRANT ALL PRIVILEGES ON *.* ‘root'@'%
- 今天把Ext.js源码又读了一遍,不过这次比较认真。看完代码,有了不少收获也遇到不少问题。主要总结如下:1、document.execCom
- 我们曾经提到,Oyster.com的Python web服务器怎样利用一个巨大的Python dicts(hash table),缓存大量的
- 本文实例为大家分享了Python tkinter实现计算器功能的具体代码,供大家参考,具体内容如下python版本:3.5一.计算器的功能描
- 一、场景说明在面试接口自动化时,经常会问,其他接口调用的前提条件是当前用户必须是登录状态,如何处理接口依赖?在此之前我们介绍过session
- 前两天拉取公司前端代码修改,发现在开发者工具的sources选项里边,居然没有列出来我要调试的js脚本,后来观察了一下,脚本是动态在页面里引
- 一,简介退火算法不言而喻,就是钢铁在淬炼过程中失温而成稳定态时的过程,热力学上温度(内能)越高原子态越不稳定,而温度有一个向低温区辐射降温的
- Go反射的实现和 interface 和 unsafe.Pointer 密切相关。如果对golang的 interface 底层实现还没有理
- 前言说起面试,很多同学都经历过,但是 面试中 可能会遇到各种问题,MySQL 的问题 也是非常多,最近我也经常面试,也希望问一些数据库一些偏
- 日志文件一般是按天产生,则通过在程序中判断文件的产生日期与当前时间,更换监控的日志文件程序只是简单的示例一下,监控test1.log 10秒
- FileSystemObject、Folder 和 File 对象的一些方法都与通过 TextStream 对象创建、读取或写入文件有关。虽
- 一、 申请企业微信账号,申请地址 https://qy.weixin.qq.com/二、 登陆企业微信账图一图二2、添加微信账号图
- 1. 创建主窗口上文中我们建立的图形界面程序 GUIdemo2.py,通过导入图形界面 uiDemo1.py,已经实现了主窗口的创建。1.1
- pycharm常用快捷键1、编辑(Editing)Ctrl + Space基本的代码完成(类、方法、属性)Ctrl + Alt + Spac
- 前言由于python3.10之后版本不在支持libressl使用ssl,需要使用openssl安装来解决编译安装python时候遇到的ssl
- 网上有很多免费的ip地址,都是可以使用的,但是如果手动来获取太麻烦,这里通过Python自动抓取,可以批量获取。代码如下:# -*- cod