固定位置水印识别判断———by.北方区平平无奇组织
评论
收藏

固定位置水印识别判断———by.北方区平平无奇组织

经验分享
救森
2023-06-13 20:52·浏览量:2107
救森
发布于 2023-06-13 20:522107浏览

    客户对某些网站抓取图片时候需要去除水印,但是遇到一个问题,如该网页并非所有的商品图都会带有水印,所以考虑通过影刀能够识别出哪些带有水印图片,目前针对固定位置的水印图片提出以下的解决方案:


    下面利用python cv2包来识别图像,思路为识别图像的轮廓,对轮廓面积进行计算,如果没有水印则没有轮廓,轮廓面积为0,则判断该处没有水印。

目前此方法只适用于白底图及水印位置相对固定的图片(同一店铺的不同类目产品)具体步骤如下:

截取图片水印位置

将图片变为灰度图

利用cv2.threshold将图片变成黑白的二值图

利用findcontours获取为白值的轮廓

对轮廓进行面积计算,得出为87.5

最后判断如果面积大于10,则判断该固定区域有水印,否则无水印

可知目标图片有水印,所以判断为true

批量抓取图片,调用python模块可见运行结果如下

具体代码如下:

import xbot

from xbot import printsleep

from .import package

from .package import variables as glv

from typing import *

import cv2

def detect_watermark(image_path) :

    img = cv2.imread(image_path)

    height = int(len(img)/8)

    width = int(len(img[0])/3.4)

    img=img[0:height,0:width]

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

    _, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)

    contours, _ = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

    cv2.drawContours(img,contours,-1,(255,255,0),2)  

    cv2.imshow("img", img)  

    cv2.waitKey(0)

    for contour in contours:

        area = cv2.contourArea(contour)

        print(area)

        if area > 0:

            return True

    return False

    

def main(args):

    pass

收藏1
全部评论1
最新
发布评论
评论