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

    效果图:

  • 相关阅读:
    [洛谷P2745] [USACO5.3]窗体面积Window Area
    [洛谷P2751] [USACO4.2]工序安排Job Processing
    [洛谷P2738] [USACO4.1]篱笆回路Fence Loops
    [洛谷P4609] [FJOI2016]建筑师
    [洛谷P3228] [HNOI2013]数列
    解决Qt5使用SSL的“qt.network.ssl: QSslSocket: cannot resolve SSLv2_client_method”错误
    qt查看是否支持SSL
    qt获取依赖的openssl的版本
    qt关闭ssl验证,解决不能正常使用自签署ssl证书API的问题
    使用OpenSSL创建HTTPS所使用的SSL证书
  • 原文地址:https://www.cnblogs.com/liming19680104/p/12222033.html
Copyright © 2011-2022 走看看