基于人像的抖动进行边缘分割

具体代码如下

# -*- coding: utf-8 -*-
"""
Created on Thu Aug 15 10:48:09 2019

@author: 01
"""

#!/usr/bin/env python

import cv2
import numpy as np
ph1 = "img/1.jpg"
ph2 = "img/2.jpg"
ph3 = "img/3.jpg"
ph4 = "img/4.jpg"
ph5 = "img/5.jpg"
ph6 = "img/6.jpg"
ph7 = "img/7.jpg"
ph8 = "img/8.jpg"
threshod= 40 

s1 = cv2.imread(ph1,0)
s2 = cv2.imread(ph2,0)
s3 = cv2.imread(ph3,0)
s4 = cv2.imread(ph4,0)
s5 = cv2.imread(ph5,0)
s6 = cv2.imread(ph6,0)
s7 = cv2.imread(ph7,0)
s8 = cv2.imread(ph8,0)
emptyimg1 = np.zeros(s1.shape,np.uint8)
emptyimg2 = np.zeros(s1.shape,np.uint8)
emptyimg3 = np.zeros(s1.shape,np.uint8)
emptyimg4 = np.zeros(s1.shape,np.uint8)
emptyimg5 = np.zeros(s1.shape,np.uint8)
emptyimg6 = np.zeros(s1.shape,np.uint8)
emptyimg7 = np.zeros(s1.shape,np.uint8)
emptyimg8 = np.zeros(s1.shape,np.uint8)
emptyimg9 = np.zeros(s1.shape,np.uint8)
def pic_sub(dest,s1,s2):
    for x in range(dest.shape[0]):
        for y in range(dest.shape[1]):
            if(s2[x,y] > s1[x,y]):
                dest[x,y] = s2[x,y] - s1[x,y]
            else:
                dest[x,y] = s1[x,y] - s2[x,y]

            if(dest[x,y] < threshod):
                dest[x,y] = 0
            else:
                dest[x,y] = 255

def pic_add(dest,s1,s2):
    for x in range(dest.shape[0]):
        for y in range(dest.shape[1]):
            if(s2[x,y] > s1[x,y]):
                dest[x,y] = s2[x,y] - s1[x,y]
            else:
                dest[x,y] = s1[x,y] - s2[x,y]

            if(dest[x,y] < threshod):
                dest[x,y] = 0
            else:
                dest[x,y] = 255

pic_sub(emptyimg1,s1,s3)
pic_sub(emptyimg2,s2,s4)
pic_sub(emptyimg3,s3,s5)
pic_sub(emptyimg4,s4,s6)

pic_add(emptyimg5,emptyimg1,emptyimg2)
pic_add(emptyimg6,emptyimg3,emptyimg4)
pic_add(emptyimg7,emptyimg5,emptyimg6)
cv2.namedWindow("s1")
cv2.namedWindow("s2")
cv2.namedWindow("result")

cv2.imshow("s1",emptyimg1)
cv2.imshow("s2",emptyimg2)
cv2.imshow("result",emptyimg7)

cv2.waitKey(0)
cv2.destroyAllWindows()

如果有一个视频,可以从中拿出相邻的两帧图像,最简单的就是进行图像相减,可以找到边界点效果

(LK算法更好)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于人像分割的局部美颜通常指的是对人脸区域进行美颜处理,同时保留原始图像的背景。实现方式可以使用人像分割技术来分离人脸和背景,然后对人脸区域进行美颜处理。 以下是一种基于GrabCut算法的实现方法: 1. 加载图像并将其转换为灰度图像。 ```python import cv2 img = cv2.imread('your_image.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ``` 2. 使用OpenCV的Haar级联分类器来检测人脸。 ```python face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') faces = face_cascade.detectMultiScale(gray, 1.3, 5) ``` 3. 对于每个检测到的人脸区域,使用GrabCut算法进行人像分割。 ```python # 创建一个掩码(mask),将人脸区域初始化为前景(前景=1,背景=0) mask = np.zeros(img.shape[:2], np.uint8) for (x,y,w,h) in faces: rect = (x, y, w, h) mask, bgdModel, fgdModel = cv2.grabCut(img, mask, rect, None, None, 5, cv2.GC_INIT_WITH_RECT) # 将掩码中标记为前景的区域提取出来作为人像 person = cv2.bitwise_and(img, img, mask=(mask==cv2.GC_FGD).astype(np.uint8)) ``` 4. 对人像区域应用美颜效果。 ```python # 对人像区域应用美颜效果 person = cv2.GaussianBlur(person, (15, 15), 0) # 高斯模糊 person = cv2.addWeighted(person, 1.5, person, 0, 10) # 图像增强 ``` 5. 将美化后的人像区域和原始图像的背景合并。 ```python # 将美化后的人像区域和原始图像的背景合并 background = cv2.bitwise_and(img, img, mask=(mask==cv2.GC_BGD).astype(np.uint8)) result = cv2.bitwise_or(person, background) ``` 最后,使用`cv2.imshow`函数将处理后的图像显示出来。 ```python cv2.imshow('image', result) cv2.waitKey(0) cv2.destroyAllWindows() ``` 需要注意的是,GrabCut算法需要人工指定一个矩形框来包含人脸区域,如果矩形框不准确,会影响分割的效果。另外,GrabCut算法的计算量比较大,处理较大的图像可能会比较耗时。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值