zoukankan      html  css  js  c++  java
  • python-opencv-图像马赛克效果

    马赛克效果是当前使用较为广泛的一种图像或视频处理手段,它将图像或视频中特定区域的色阶细节劣化并造成色块打乱的效果,因为这种模糊效果看上去是由一个个的小格子组成,我们便形象的称这种画面为马赛克。马赛克效果的主要目的通常是使特定区域无法辨认。

    图像是由一个个的像素所组成的,并且每一个像素都有一个bgr值。要实现图像的马赛克效果,我们只需要设置一个像素块,并将该像素块中的所有像素都使用同一个bgr值来表示。 

     如上图所示,假设我们将马赛克大小设置为5个像素宽度,即设置一个5×5的像素块。所谓的马赛克效果,就是将这25个像素值全部处理成与矩阵第一个像素值相等的像素值,然后重新填充这个5×5的矩阵像素值即可。整个图像的马赛克只需要每次从左到右,从上到下,以步长为5个像素去处理每个5×5的像素矩阵,并且每次都将对应的25个像素值处理成与当前矩阵第一个像素值相等的像素值,直到将整个图像的像素处理完成即可生成整个图像的马赛克图像。

    首先按照惯例使用imread()函数读取原图像的图像数据,使用shape属性获取图像的宽高信息。然后遍历像素点,由于我们设置的马赛克大小是5个像素宽度,为了防止宽高溢出,遍历像素点时宽高都需要减去5。每遍历25个像素点,即宽和高的当前坐标都能被5整除时,将该25个像素点值都处理成与当前像素块的第一个像素的像素值一致。

    import cv2
    import numpy as np
    
    img = cv2.imread("2013.jpg",1)  #读取一张图片,彩色
    cha=img.shape
    height,width,deep=cha
    cv2.imshow('img',img)
    for m in range(height-5):  #马赛克
        for n in range(width-5):
            if m%5==0 and n%5==0 :
                for i in range(5):
                    for j in range(5):
                        b,g,r=img[m,n]
                        img[m+i,n+j]=(b,g,r)
    
    cv2.imshow('dst',img)
    cv2.waitKey()  #窗口等待任意键盘按键输入,0为一直等待,其他数字为毫秒数

    效果图:

    以上代码我们实现的是整个图像的马赛克效果,而在实际应用中,我们可能并不需要将整个图像进行马赛克处理,这时只需要遍历指定区域的像素点进行相同操作即可。不难发现的是,我们设置的马赛克像素块大小越大,马赛克效果越明显。

    下面我把马赛克像素块改为10

    import cv2
    
    img = cv2.imread("2013.jpg",1)  #读取一张图片,彩色
    cha=img.shape
    height,width,deep=cha
    cv2.imshow('img',img)
    for m in range(height-10):  #马赛克
        for n in range(width-10):
            if m%10==0 and n%10==0 :
                for i in range(10):
                    for j in range(10):
                        b,g,r=img[m,n]
                        img[m+i,n+j]=(b,g,r)
    
    cv2.imshow('dst',img)
    cv2.waitKey()

    效果图:

  • 相关阅读:
    br-lan、eth0、eth1及lo (转)
    openwrt MT7628 编译前更改为DHCP,root 密码、ssid、时区、主机名
    Openwrt Uboot烧写
    区块链公链“三元悖论”专题之可扩展性(Scalability)
    物联网开发|如何选择一款适合你的物联网操作系统?
    oracle 处理Session不够用
    Redis 数据总结 (2.命令实现逻辑)
    Redis 数据总结(1 数据导入)
    Redis 数据库使用和搭建
    MySql 存储大量长字节 Text报错处理办法
  • 原文地址:https://www.cnblogs.com/liming19680104/p/12222033.html
Copyright © 2011-2022 走看看