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()

    效果图:

  • 相关阅读:
    JavaScript事件的几个细节
    CSS选择器从右向左的匹配规则
    JavaScript原型与继承
    CSS3制作ajax loader icon
    jQuery之.on()方法
    Special Resource Operator (SRO)
    openness configure dns server
    add dns items for coredns
    深入理解linux nat
    tcpdump for container
  • 原文地址:https://www.cnblogs.com/liming19680104/p/12222033.html
Copyright © 2011-2022 走看看