当前位置:   article > 正文

利用opencv进行图片水印消除_opencv去除水印

opencv去除水印

原本链接

http://mp.weixin.qq.com/s?__biz=MzU0NjgzMDIxMQ==&mid=2247603195&idx=1&sn=8bfcca9d1509f6eb110a9d71fee5a854&chksm=fb54b117cc233801e2a457b58f63d48cf9972751d758b00c1f51d6ec8d13696f7dd7ac54ae41&mpshare=1&scene=23&srcid=0127xih4gsWlTJfoZOCJI21n&sharer_sharetime=1674821799870&sharer_shareid=894bd5f309a833376a13a462dd6dd289#rd

问题:原本代码局限:只能处理黑白图片

改进方法:将初始水印消除后的图片作为标签,再次进行分割(如果是黑色就保留原图像素,如果没有就消除)

案例:请添加图片描述

import cv2
import numpy as np
import matplotlib.pyplot as plt


def enable_color(rgb_image,check_image):  #
    h, w = rgb_image.shape[:2]
    for i in range(0, h - 1):
        for j in range(0, w - 1):
            if check_image[i][j] == 255:
                for k in range(3):
                    rgb_image[i][j][k] = 255
    return rgb_image

if __name__ =='__main__':
    img_path = "1.jpg"
    im = cv2.imread(img_path)

    gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)

    background = gray.copy()
    for i in range(1,5):
        kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(2*i+1,2*i+1))
        # print('kernel size is ',kernel)
        background = cv2.morphologyEx(background,cv2.MORPH_CLOSE,kernel)
        background = cv2.morphologyEx(background,cv2.MORPH_CLOSE,kernel)

    diff = background - gray # 计算差距

    # cv2.namedWindow('diff',cv2.WINDOW_FREERATIO) # 获取图像中前景背景之差
    # cv2.imshow('diff',background)
    # 阈值分割获取黑色字体
    _,bw = cv2.threshold(diff,0,255,cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)
    # 阈值分割获取黑色区域
    # cv2.namedWindow('bw_before', cv2.WINDOW_FREERATIO)
    # cv2.imshow('bw_before', bw)


    _,dark = cv2.threshold(background,0,255,cv2.THRESH_BINARY_INV|cv2.THRESH_OTSU)

    darkpix = cv2.countNonZero(dark)# 获取 dark非0d图像像素个数
    darkpix = [0]*darkpix
    index = 0
    # cv2.namedWindow('gray', cv2.WINDOW_FREERATIO)
    # cv2.imshow('gray', gray)



    for r in range(dark.shape[0]):
        for c in range(dark.shape[1]):
            if(dark[r][c]):
                darkpix[index]  = gray[r][c]
                index = index +1

    # 阈值分割 dark 区域 因此我们在里面得到更深的像素
    darkpix = np.array(darkpix)
    _,darkpix = cv2.threshold(darkpix,0,255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)

    # cv2.namedWindow('darkpix', cv2.WINDOW_FREERATIO)
    # cv2.imshow('darkpix', darkpix)

    # 把 取到的像素粘贴到 其渠道的 darker pixels

    # cv2.namedWindow('dark',cv2.WINDOW_FREERATIO)
    # cv2.imshow('dark',dark)

    index = 0
    for r in range(dark.shape[0]):
        for c in range(dark.shape[1]):
            if (dark[r][c]):
                bw[r][c] =  darkpix[index]
                index = index +1

    # cv2.namedWindow('bw',cv2.WINDOW_FREERATIO)
    # cv2.imshow('bw',bw)

    out=enable_color(im, bw)

    # cv2.namedWindow('out',cv2.WINDOW_FREERATIO)
    # cv2.imshow('out',out)

    cv2.imwrite(filename="77__.jpg", img=bw)
    cv2.imwrite(filename="77__5.jpg",img=out)

    # cv2.waitKey(0)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/975419
推荐阅读
相关标签
  

闽ICP备14008679号