iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >PythonOpencv实战之印章提取的实现
  • 162
分享到

PythonOpencv实战之印章提取的实现

2024-04-02 19:04:59 162人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言源码展示效果展示前言 这期分享的是使用OpenCV提取印章,很多时候我们需要电子版的章,所以今天就带大家使用代码提取出来! Photoshop虽然强大,但是奈何小编不会使啊,

前言

这期分享的是使用OpenCV提取印章,很多时候我们需要电子版的章,所以今天就带大家使用代码提取出来!

Photoshop虽然强大,但是奈何小编不会使啊,昨天就有一个小伙伴问我能不能帮忙,这不?

PS虽然我不会,但是我会写代码呀!这可难不倒我!安排安排~

(特别提醒:所有爱好设计和喜欢做图的小伙伴们,切记千万不要帮着老板或者朋友PS伪造公章,刑法第280条特别指出,伪造证件印章,是可以追究刑事责任的,违法的事情不要做哦。)

源码展示

import cv2
import numpy as np

class Seal:
    def __init__(self, img_path):
        """
        初始化图片
        :param img_path: 原始图片路径        """
        self.image = cv2.imread(img_path)
        self.img_shape = self.image.shape
        self.file_name = img_path.split('.')[0].split('\\')[-1]

    def unify_img_size(self):
        """
        统一图片的大小
        :return:返回一张未处理的目标图片        """
        img_w = 650 if self.img_shape[1] > 600 else 400
        self.image = cv2.resize(self.image, (img_w, int(img_w * self.img_shape[0] / self.img_shape[1])), interpolation=cv2.IMREAD_COLOR)
        impng = cv2.cvtColor(self.image.copy(), cv2.COLOR_RGB2RGBA)
        return impng

    def img_binaryzation(self,hue_image, low_range, high_range, imgpng):

        th = cv2.inRange(hue_image, low_range, high_range)
        element = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 1))
        th = cv2.dilate(th, element)
        index1 = th == 255
        print_img = np.zeros(imgpng.shape, np.uint8)
        print_img[:, :, :] = (255, 255, 255, 0)
        print_img[index1] = imgpng[index1]  # (0,0,255)
        return print_img

    def img_enhance(self):
        imgpng = self.unify_img_size()
        hue_image = cv2.cvtColor(self.image, cv2.COLOR_BGR2HSV)  # 处理图像色调
        low_range = np.array([130, 43, 46])  # 设下边界
        high_range = np.array([180, 255, 255])  # 设上边界
        print1 = self.img_binaryzation(hue_image, low_range, high_range, imgpng)
        low_range = np.array([0, 43, 46])
        high_range = np.array([9, 255, 255])
        print2 = self.img_binaryzation(hue_image, low_range, high_range, imgpng)
        imgreal = cv2.add(print2, print1)

        white_px = np.asarray([255, 255, 255, 255])
        (row, col, _) = imgreal.shape
        for r in range(row):
            for c in range(col):
                px = imgreal[r][c]
                if all(px == white_px):
                    imgreal[r][c] = imgpng[r][c]
        return imgreal

    def extension_img(self):
        """
        边缘检测,截取并输出结果
        :return:
        """
        imgreal = self.img_enhance()
        # 扩充图片防止截取部分
        print4 = cv2.copyMakeBorder(imgreal, 50, 50, 50, 50, cv2.BORDER_CONSTANT, value=[255, 255, 255, 0])
        print2gray = cv2.cvtColor(print4, cv2.COLOR_RGBA2GRAY)
        _, grayfirst = cv2.threshold(print2gray, 254, 255, cv2.THRESH_BINARY_INV)

        element = cv2.getStructuringElement(cv2.MORPH_RECT, (22, 22))
        img6 = cv2.dilate(grayfirst, element)

        c_canny_img = cv2.Canny(img6, 10, 10)

        contours, hierarchy = cv2.findContours(c_canny_img, cv2.RETR_EXTERNAL, cv2.CHaiN_APPROX_NONE)
        areas = []
        for i, cnt in enumerate(contours):
            x, y, w, h = cv2.boundingRect(cnt)
            area = w * h
            ars = [area, i]
            areas.append(ars)
        areas = sorted(areas, reverse=True)
        maxares = areas[:1]

        x, y, w, h = cv2.boundingRect(contours[maxares[0][1]])
        print5 = print4[y:(y + h), x:(x + w)]
        # 高小于宽
        if print5.shape[0] < print5.shape[1]:
            zh = int((print5.shape[1] - print5.shape[0]) / 2)
            print5 = cv2.copyMakeBorder(print5, zh, zh, 0, 0, cv2.BORDER_CONSTANT, value=[255, 255, 255, 0])
        else:
            zh = int((print5.shape[0] - print5.shape[1]) / 2)
            print5 = cv2.copyMakeBorder(print5, 0, 0, zh, zh, cv2.BORDER_CONSTANT, value=[255, 255, 255, 0])
        resultprint = cv2.resize(print5, (150, 150))

        cv2.imwrite(r'output\{}_result.png'.fORMat(self.file_name), resultprint)


if __name__ == '__main__':
    s = Seal(r"src\2.jpg")
    s.extension_img()

效果展示

原图

效果图

到此这篇关于python Opencv实战之印章提取的实现的文章就介绍到这了,更多相关Python Opencv印章提取内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: PythonOpencv实战之印章提取的实现

本文链接: https://www.lsjlt.com/news/143682.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PythonOpencv实战之印章提取的实现
    目录前言源码展示效果展示前言 这期分享的是使用opencv提取印章,很多时候我们需要电子版的章,所以今天就带大家使用代码提取出来! Photoshop虽然强大,但是奈何小编不会使啊,...
    99+
    2024-04-02
  • PythonOpencv实战之文字检测OCR
    目录1.相关函数的讲解2.代码展示Detecting WordsDetecting ONLY Digits3.问题叙述4.image_to_data()配置讲解5.项目拓展6.总结与...
    99+
    2024-04-02
  • PythonOpenCV实战之与机器学习的碰撞
    目录0.前言1.机器学习简介1.1监督学习1.2无监督学习1.3半监督学习2.K均值(K-Means)聚类2.1K-Means聚类示例3.K最近邻3.1K最近邻示例4.支持向量机4....
    99+
    2024-04-02
  • Python实战之ATM取款机的实现
    目录一、项目视图分析二、文件结构分析三、完整代码1.start.py2.conf3.core4.interface5.db6.lib7.readme一、项目视图分析 通过上图,我们...
    99+
    2024-04-02
  • Python实战之实现获取动态图表
    目录前言开发工具环境搭建百度指数微博指数结果展示前言 利用Python实现获取动态图表,废话不多说~ 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: re...
    99+
    2024-04-02
  • PythonPygame实战之飞机大战的实现
    目录导语一、环境安装1)各种素材(图片、字体等)2)运行环境二、代码展示1)文章思路2)附代码讲解3)主程序三、效果展示总结导语 三月疫情原因,很多地方都封闭式管理了! 在回家无聊的...
    99+
    2024-04-02
  • vue实战:打印小票的实现方法
    vue也能实现打印小票?下面本篇文章就带大家详细了解一下怎么通过安装 lodop 打印控件,实现打印小票,本文附有详细实例代码哦,希望对大家有所帮助!lodop 打印控件安装 lodop 打印控件lodop地址: http://www.c-...
    99+
    2023-05-14
    Vue
  • 基于Vue3实现印章徽章组件的示例代码
    目录一、组件实现代码二、组件全局注册代码三、组件应用代码需要实现的组件效果: 该组件有设置颜色、大小、旋转度数和文本内容功能。 一、组件实现代码 组件代码文件结构 src/com...
    99+
    2023-05-18
    Vue3实现印章徽章组件 Vue3印章徽章组件 Vue3印章组件 Vue3 组件
  • Python实现印章代码的算法解析
    目录1.题目2.代码3.代码解析1.题目 2.代码 #共有n种图案的印章,每种图案的出现概率相同。小A买了m张印章,求小A集齐n种印章的概率。 n,m=map(int,input(...
    99+
    2024-04-02
  • C#实现自动生成电子印章
    网络办公正逐渐成为常态,无纸化办公也是一个潮流,这二者需要电子签章,最简单的方法就是在纸上盖一个章然后扫描成电子图片文件,最后在你的系统加载这个签章电子图片文件。但这样就会些不理想的...
    99+
    2024-04-02
  • Python Pygame实战之红心大战游戏的实现
    目录导语一、 红心大战用户手册二、红心大战游戏规则三、准备中四、代码演示五、效果展示导语 还记得那些年,我们玩过的Windows小游戏吗? 说起Windows自带的游戏,相信许多8...
    99+
    2024-04-02
  • Python实现制作透明背景的电子印章
    目录一、前言二、步骤解析三、源代码和运行效果1.源代码2.运行效果图一、前言 今天分享一个Python 制作透明背景的电子印章的代码,代码是通过网络获得并整理的,大家可以参考和学习。...
    99+
    2024-04-02
  • PythonScrapy实战之古诗文网的爬取
    目录需求1. Scrapy项目创建2. 全局配置 settings.py3. 爬虫程序.py4. 数据结构 items.py5. 管道 pipelines.py6. 程序执行 sta...
    99+
    2024-04-02
  • Unity3D实战之答题系统的实现
    目录一、前言三、实现1.界面搭建2.读取文档3.加载题目4.按钮功能5.题目对错判断四、后言一、前言 这是本专栏系列的第一篇,答题系统的开发。 这个答题系统,可以从文本文档中提取题目...
    99+
    2024-04-02
  • Pygame实战之迷宫游戏的实现
    目录导语正文1)效果展示2)主程序导语 哈喽!哈喽我是栗子,每日更新来啦—— “玩迷宫游戏长大的我们,欣慰地看到,下一代仍热爱着这个经典游戏。 如...
    99+
    2024-04-02
  • PythonPygame实战之塔防游戏的实现
    目录一、环境要求二、游戏介绍1、游戏目标2、先上游戏效果图三、完整开发流程1、项目主结构2、详细配置3、定义敌人、塔楼、子弹的类4、游戏开始:选择难度地图5、游戏开始界面6、游戏运行...
    99+
    2024-04-02
  • PHP实战之投票系统的实现
    目录一、实现代码1.sql2.html3.admin.php(增删改查投票的页面)密码:admi4.index.php投票的页面二、效果图一、实现代码 1.sql -- phpMy...
    99+
    2024-04-02
  • PythonPygame实战之赛车游戏的实现
    目录导语一、环境安装1)运行环境2)素材环境二、代码展示三、效果展示游戏开始——游戏界面——游戏结束——导语 ...
    99+
    2024-04-02
  • 基于matlab实现DCT数字水印嵌入与提取
    目录一、离散小波变换的音频信号数字水印技术简介0 引言1 音频数字水印技术分类2 基于DWT的音频水印算法二、部分源代码三、运行结果一、离散小波变换的音频信号数字水印技术简介 0 引...
    99+
    2024-04-02
  • PythonOpenCV图像矫正的原理实现
    目录题目描述基本思路核心代码题目描述 目录hw1下的图像是一些胶片的照片,请将其进行度量矫正。 推荐流程:采用Canny算子,检测边缘点;采用Hough直线检测,根据边缘点检测胶片边...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作