万恶的马赛克---OpenCV-Python开发指南(51)

简介: 万恶的马赛克---OpenCV-Python开发指南(51)

马赛克算法原理


在平常的生活中,我们会经常看到各种马赛克,比如某些宅男硬盘里的视频马赛克,有些直播犯罪嫌疑人的头像遮罩马赛克等。可以说在生活中,马赛克无处不在。


因此,我们在学习OpenCV的同时,也要熟练掌握马赛克的应用。下面,我们来了解马赛克算法的几种实现原理:


1.将需要马赛克的图像部位,全部赋值为该区域左上角的第一个像素值

2.将需要马赛克的图像部位像素随机打乱

3.随机用某一点代替需要马赛克区域内的所有像素值。


本篇将详细介绍马赛克的处理操作。


实现图片中的马赛克


这里,我们使用3实现原理,通过随机用某一点代替需要马赛克区域内的所有像素值。具体代码如下所示:

#马赛克操作
def mosaic_effect(img):
    new_img = img.copy()
    h, w, n = img.shape
    size = 10#马赛克大小
    for i in range(size, h - 1 - size, size):
        for j in range(size, w - 1 - size, size):
            i_rand = random.randint(i - size, i)
            j_rand = random.randint(j - size, j)
            new_img[i - size:i + size, j - size:j + size] = img[i_rand, j_rand, :]
    return new_img
if __name__ == "__main__":
    img = cv2.imread("49.jpg")
    cv2.imshow("0", img)
    cv2.imshow("1", mosaic_effect(img))
    cv2.waitKey()
    cv2.destroyAllWindows()


可以看到,我们代码中设置的马赛克大小为10,在这个区域内,随机取一个像素点,将所有的像素都设置成该随机选取的像素值,这样就达到了马赛克的目的。而且对于原图来说,轮廓看起来还是没有变化的。效果如下:


跟踪视频人脸,将人脸用马赛克遮挡


直接实现图片中的马赛克好像有点简单,我们不妨结合前文的捕捉摄像头的知识以及人脸检测知识,将马赛克用于视频之中。话不多说,我们直接上代码:

# 将视频中的人脸替换成马赛克
def mosaic_video_effect(img):
    height, width, n = img.shape
    new_img = img.copy()
    size = 20
    faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = faceCascade.detectMultiScale(gray, scaleFactor=1.15, minNeighbors=2, minSize=(5, 5))
    for (x, y, w, h) in faces:
        for i in range(x + size, (x + w) - 1 - size, size):
            for j in range(y + size, (y + h) - 1 - size, size):
                if i - size > 0 and j + size < width and i + size < height and j - size > 0:
                    i_rand = random.randint(i - size, i)
                    j_rand = random.randint(j - size, j)
                    new_img[i - size:i + size, j - size:j + size] = img[i_rand, j_rand, :]
                else:
                    new_img[x:x + w, y:y + h] = [255, 255, 255]
    return new_img
if __name__ == "__main__":
    cap = cv2.VideoCapture(0)
    while (cap.isOpened()):
        ret, frame = cap.read()
        frame = mosaic_video_effect(frame)
        cv2.imshow('video', frame)
        c = cv2.waitKey(1)
        if c == 27:
            break
    cap.release()
    cv2.destroyAllWindows()


这里需要注意的是,因为我们只部分遮挡人脸,所以并不是全屏马赛克,而当人脸移动到摄像头边缘时,这个时候i - size,j-size可能小于0,j + size,i + size可能大于宽度高度,将导致数组越界报错。所以,为了避免人脸在边缘时,越界赋值,我们判断在边缘时直接遮挡白色马赛克即可。

相关文章
|
7月前
|
数据采集 存储 XML
深入浅出:基于Python的网络数据爬虫开发指南
【2月更文挑战第23天】 在数字时代,数据已成为新的石油。企业和个人都寻求通过各种手段获取互联网上的宝贵信息。本文将深入探讨网络爬虫的构建与优化,一种自动化工具,用于从网页上抓取并提取大量数据。我们将重点介绍Python语言中的相关库和技术,以及如何高效、合法地收集网络数据。文章不仅为初学者提供入门指导,也为有经验的开发者提供进阶技巧,确保读者能够在遵守网络伦理和法规的前提下,充分利用网络数据资源。
|
4月前
|
机器学习/深度学习 XML 搜索推荐
图像自动化保存工具:Python脚本开发指南
图像自动化保存工具:Python脚本开发指南
|
数据采集 JavaScript 前端开发
Web爬虫开发指南:使用Python的BeautifulSoup和Requests库
Web爬虫是一种从互联网上获取数据的自动化工具,它可以用于抓取网页内容、提取信息和分析数据。Python提供了一些强大的库,其中BeautifulSoup和Requests是两个常用的工具,用于解析HTML内容和发起HTTP请求。本文将介绍如何使用BeautifulSoup和Requests库构建一个简单而有效的Web爬虫。
|
前端开发 API 数据库
Python网站开发指南:构建现代化、高效的Web应用
在当今数字化时代,网站已成为企业、组织以及个人展示自己的重要窗口。Python作为一种简洁、高效且易于学习的编程语言,被广泛运用于网站开发领域。本文将向您介绍如何使用Python进行网站开发,包括常用的Web框架、关键技术和最佳实践。
|
安全 小程序 程序员
屏幕录制与GIF转换---OpenCV-Python开发指南(46)
屏幕录制与GIF转换---OpenCV-Python开发指南(46)
198 2
屏幕录制与GIF转换---OpenCV-Python开发指南(46)
|
计算机视觉
直方图均衡化处理:去雾---OpenCV-Python开发指南(45)
直方图均衡化处理:去雾---OpenCV-Python开发指南(45)
275 2
直方图均衡化处理:去雾---OpenCV-Python开发指南(45)
|
计算机视觉
实现抖音时光倒流效果---OpenCV-Python开发指南(56)
实现抖音时光倒流效果---OpenCV-Python开发指南(56)
193 1
实现抖音时光倒流效果---OpenCV-Python开发指南(56)
|
计算机视觉
Fisherfaces人脸识别---OpenCV-Python开发指南(44)
Fisherfaces人脸识别---OpenCV-Python开发指南(44)
316 1
Fisherfaces人脸识别---OpenCV-Python开发指南(44)
|
计算机视觉
实现抖音慢动作效果---OpenCV-Python开发指南(57)
实现抖音慢动作效果---OpenCV-Python开发指南(57)
245 1
|
算法
实现人脸美白算法---OpenCV-Python开发指南(59)
实现人脸美白算法---OpenCV-Python开发指南(59)
661 0
实现人脸美白算法---OpenCV-Python开发指南(59)