最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python Opencv實(shí)戰(zhàn)之印章提取的實(shí)現(xiàn)

 更新時間:2022年03月24日 09:04:29   作者:木木子學(xué)python  
很多時候我們需要電子版的章,但有些同學(xué)并不會通過Photoshop摳圖獲取。因此本文將利用Python OpenCV來實(shí)現(xiàn)印章的提取,感興趣的可以了解一下

前言

這期分享的是使用opencv提取印章,很多時候我們需要電子版的章,所以今天就帶大家使用代碼提取出來!

Photoshop雖然強(qiáng)大,但是奈何小編不會使啊,昨天就有一個小伙伴問我能不能幫忙,這不?

PS雖然我不會,但是我會寫代碼呀!這可難不倒我!安排安排~

(特別提醒:所有愛好設(shè)計(jì)和喜歡做圖的小伙伴們,切記千萬不要幫著老板或者朋友PS偽造公章,刑法第280條特別指出,偽造證件印章,是可以追究刑事責(zé)任的,違法的事情不要做哦。)

源碼展示

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):
        """
        統(tǒng)一圖片的大小
        :return:返回一張未處理的目標(biāo)圖片        """
        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)  # 處理圖像色調(diào)
        low_range = np.array([130, 43, 46])  # 設(shè)下邊界
        high_range = np.array([180, 255, 255])  # 設(shè)上邊界
        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):
        """
        邊緣檢測,截取并輸出結(jié)果
        :return:
        """
        imgreal = self.img_enhance()
        # 擴(kuò)充圖片防止截取部分
        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()

效果展示

原圖

效果圖

到此這篇關(guān)于Python Opencv實(shí)戰(zhàn)之印章提取的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python Opencv印章提取內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Python搭建局域網(wǎng)大文件分享傳輸工具

    基于Python搭建局域網(wǎng)大文件分享傳輸工具

    這篇文章主要為大家詳細(xì)介紹了如何基于Python搭建局域網(wǎng)大文件分享傳輸工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • 在PyCharm中打包Python項(xiàng)目并將其運(yùn)行到服務(wù)器上的方法(推薦)

    在PyCharm中打包Python項(xiàng)目并將其運(yùn)行到服務(wù)器上的方法(推薦)

    在PyCharm中打包Python項(xiàng)目并運(yùn)行到服務(wù)器上,主要步驟包括:創(chuàng)建并設(shè)置項(xiàng)目、編寫項(xiàng)目代碼、打包項(xiàng)目、配置服務(wù)器環(huán)境、上傳可執(zhí)行文件到服務(wù)器以及運(yùn)行項(xiàng)目,通過這些步驟,可以將Python項(xiàng)目打包并部署到服務(wù)器上
    2024-11-11
  • python畫折線圖的程序

    python畫折線圖的程序

    這篇文章主要為大家詳細(xì)介紹了python畫折線圖的方法,一個畫折線圖的程序具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • python人工智能tensorflow構(gòu)建循環(huán)神經(jīng)網(wǎng)絡(luò)RNN

    python人工智能tensorflow構(gòu)建循環(huán)神經(jīng)網(wǎng)絡(luò)RNN

    這篇文章主要為大家介紹了python人工智能tensorflow構(gòu)建循環(huán)神經(jīng)網(wǎng)絡(luò)RNN,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Python 函數(shù)簡單易理解版

    Python 函數(shù)簡單易理解版

    本文將用簡單易解的描述方法對Python 函數(shù)做一個詳情介紹,感興趣的朋友可以參考下文
    2021-08-08
  • Python3實(shí)現(xiàn)的簡單三級菜單功能示例

    Python3實(shí)現(xiàn)的簡單三級菜單功能示例

    這篇文章主要介紹了Python3實(shí)現(xiàn)的簡單三級菜單功能,涉及Python用戶交互以及針對json格式數(shù)據(jù)的遍歷、讀取、判斷等相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • python查看數(shù)據(jù)類型的方法

    python查看數(shù)據(jù)類型的方法

    在本篇文章里小編給大家整理了關(guān)于python怎么查看數(shù)據(jù)類型的相關(guān)知識點(diǎn),有需要的朋友們學(xué)習(xí)下。
    2019-10-10
  • PyCharm專業(yè)最新版2019.1安裝步驟(含激活碼)

    PyCharm專業(yè)最新版2019.1安裝步驟(含激活碼)

    這篇文章主要介紹了PyCharm專業(yè)最新版2019.1安裝步驟(含激活碼),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • python實(shí)現(xiàn)計(jì)算器功能

    python實(shí)現(xiàn)計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • python一行代碼就能實(shí)現(xiàn)數(shù)據(jù)分析的pandas-profiling庫

    python一行代碼就能實(shí)現(xiàn)數(shù)據(jù)分析的pandas-profiling庫

    這篇文章主要為大家介紹了python一行代碼就能實(shí)現(xiàn)數(shù)據(jù)分析的pandas-profiling庫,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01

最新評論

舒城县| 晋州市| 江陵县| 梓潼县| 卢湾区| 惠州市| 正宁县| 广宁县| 彩票| 山东省| 正定县| 遂昌县| 徐闻县| 师宗县| 临汾市| 吉安县| 鹤山市| 日喀则市| 海安县| 汤阴县| 安阳县| 巴青县| 吉隆县| 柳林县| 嘉定区| 商河县| 于都县| 县级市| 凌云县| 渝北区| 上高县| 远安县| 湖州市| 三明市| 樟树市| 上虞市| 玉树县| 永州市| 霍邱县| 额尔古纳市| 昌宁县|