• 大小: 6.37KB
    文件类型: .py
    金币: 1
    下载: 0 次
    发布日期: 2024-05-09
  • 语言: Python
  • 标签: 抠图  自动  

资源简介

python自动抠图(基于cv2)

资源截图

代码片段和文件信息

# -*- coding: utf-8 -*-
# @Author: haodaquan
# @Date:   2016-12-25 10:13:57
# @Last Modified by:   haodaquan
# @Last Modified time: 2016-12-30 16:50:36
import sys
import copy
import cv2
import math
import datetime


# ----------------------------------------------------------------------
# CoreImage: 核心图片类,获取核心图片
# ----------------------------------------------------------------------
class CoreImage(object):
    # imageInfo = [imageNameimagePathnewImagePath]
    def __init__(self *arg):
        imgInfo = arg[0]
        cropInfo = arg[1]
        # 原图信息
        self.imgPath = imgInfo.get(‘imgPath‘ ‘./originalImage/‘)
        self.imgName = imgInfo.get(‘imgName‘ ‘image.jpg‘)

        # 新图信息
        self.newImgPath = cropInfo.get(‘newImgPath‘ ‘./newImage/‘)
        self.isBgPure = cropInfo.get(‘isBgPure‘ 0)  # 是否纯色背景,0-不是,1-是
        self.newWidth = cropInfo.get(‘newWidth‘ 380)
        self.newHeight = cropInfo.get(‘newHeight‘ 380)
        self.line = cropInfo.get(‘line‘ 1)  # 每隔几行扫描一次,建议1,4,8

    # 获取图片边缘
    def getImgEdge(self):
        img = cv2.imread(self.imgPath + self.imgName)
        edge = cv2.Canny(img 100 300)  # 可以根据实际业务进行调整
        # cv2.imwrite(self.newImgPath+‘edge.jpg‘edge)
        return [edge img]

    # 获取核心图片
    def getCoreImg(self):
        if (self.isBgPure == 1):
            return self.getPureBgCoreImg()
        else:
            return self.getDefaultBgCoreImg()

    # 获取纯色背景核心图片
    def getPureBgCoreImg(self):

        begin = datetime.datetime.now()
        edgeImg = self.getImgEdge()
        img_width = edgeImg[1].shape[1]
        img_height = edgeImg[1].shape[0]
        x0 = 0  # 左上角x
        y0 = 0  # 左上角y
        x1 = img_width - 1
        y1 = img_height - 1

        # 左上角X轴
        i = j = 0
        for i in range(0 img_width self.line):
            if (x0 != 0):
                break;
            for j in range(0 img_height):
                if (edgeImg[0][j i] != 0):
                    x0 = i - self.line
                    break
        # 左上角Y轴
        i = j = 0
        for i in range(0 img_height self.line):
            if (y0 != 0):
                break;
            for j in range(0 img_width):
                if (edgeImg[0][i j] != 0):
                    y0 = i - self.line
                    break
        # 右下角X轴
        i = j = 0
        for i in range(0 img_width self.line)[::-1]:
            if (x1 != img_width - 1):
                break;
            for j in range(0 img_height)[::-1]:
                if (edgeImg[0][j i] != 0):
                    x1 = i + self.line
                    break
        # 右下角Y轴
        i = j = 0
        for i in range(0 img_height self.line)[::-1]:
            if (y1 != img_height - 1):
                break;
            for j in range(0 img_width)[::-1]:
                if (edgeImg[0][i j] != 0):
                    y1 = i + self.line
               

评论

共有 条评论