文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python opencv应用实现图片切分操作示例

2024-04-02 19:55

关注

说明

之前下载来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目录下。

切换效果

下面是切换之后的效果:

代码写得不怎么样,不过能够用......

以上就是Python opencv应用实现图片切分操作示例的详细内容,更多关于Python opencv图片切分的资料请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯