OpenCV轻松入门(六)——简单图片处理【马赛克、毛玻璃、浮雕效果】

马赛克效果

马赛克指现行广为使用的一种图像(视频)处理手段,此手段将影像特定区域的色阶细节劣化并造成色块打乱的效果,因为这种模糊看上去有一个个的小格子组成,便形象的称这种画面为马赛克。其目的通常是使之无法辨认。

下面,我们来介绍一下实现马赛克的思路!

假设我们将要打马赛克的区域按照4x4进行划分,我们就会得到如下左图的样子!

接下来我们要干的就是让这个4x4块内的所有像素点的颜色值都和第一个像素点的值一样.

经过运算之后,我们整个4x4块内的所有像素点就都成了黄色! 从而掩盖掉了原来的像素内容!

代码实现:

python 复制代码
import cv2
import matplotlib.pyplot as plt
def imgshow(img):
    img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    plt.imshow(img)
    plt.show()

import numpy as np
img = cv2.imread("/Users/guojun/Desktop/01.jpg")
shape = img.shape
masaike_img = np.copy(img)
offset=10
for row in range(0,shape[0],offset):
    for col in range(0,shape[1],offset):
        color = img[row,col]
        masaike_img[row:row+offset,col:col+offset]=color
        
imgshow(masaike_img)

毛玻璃效果

毛玻璃的效果和我们前面讲过的马赛克效果其实是非常相似的, 只不过毛玻璃效果是从附近的颜色块中,随机的去选择一个颜色值作为当前像素点的值!

我们还是以4x4的块大小为例,当我们去遍历每个像素点的时候, 当前像素点的颜色值,我们随机从它附近4x4的区域内选择一个颜色值作为当前像素点的值!

代码实现

python 复制代码
import cv2
import matplotlib.pyplot as plt
def imgshow(img):
    img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    plt.imshow(img)
    plt.show()

import numpy as np
import random
img = cv2.imread("/Users/guojun/Desktop/01.jpg")
shape = img.shape
maoboli_img = np.copy(img)
for row in range(shape[0]):
    for col in range(shape[1]):
        offset = random.randint(0,10)
        color_row = row+offset
        color_col = col+offset
        if color_row>= shape[0]:
            color_row=shape[0]-1
        if color_col>=shape[1]:
            color_col=shape[1]-1
        color = img[color_row,color_col]
        maoboli_img[row,col] = color
imgshow(maoboli_img)

浮雕效果

梯度

前面我们做过一个毛玻璃效果的图片, 其实原理很简单对吧,我们只需要让当前像素点的颜色和附近像素点的颜色一致就可以了! 这样带来的效果其实是图片变得模糊.

那么模糊图片和清晰图片之间的差异是什么呢? 从视觉角度来讲, 图像模糊是因为图像中物体的边缘轮廓不明显,就好比一个近视的同学,摘下眼镜看东西,整个世界的轮廓都是模糊的. 再进一步理解就是物体边缘灰度变化不强烈,层次感不强造成的! 那么反过来, 如果物体轮廓边缘灰度变化明显些, 层次感强些图像不就是清晰一些了吗?

这种灰度变化明不明显强不强烈该如何定义呢 ? 我们学过微积分, 微分就是求函数的变化率,即导数(梯度). 其实梯度我们可以把它理解为颜色变化的强度, 更直白一点说梯度相当于是2个相邻像素之间的差值!

我们先看第一行数据, 在X轴方向上,颜色值都为100,我们并没有看到任何的边缘

但是在Y轴方向上, 我们可以看到100和50之间有明显的边缘,其实这个就是梯度

浮雕效果相信大家都有比较熟悉,在opencv中我们想要实现浮雕效果,只需套用如下公式即可:

python 复制代码
gray = gray0-gray1+120

其中,相邻像素值之差可以体现边缘的突变或者称为梯度

末尾加上120只是为了增加像素值的灰度.

当然,在这个运算的过程中,我们还需要注意计算结果有可能小于0或者大于255

代码实现
python 复制代码
import cv2
import matplotlib.pyplot as plt
def imgshow(img):
    img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    plt.imshow(img)
    plt.show()

import numpy as np
import random
img = cv2.imread("/Users/guojun/Desktop/01.jpg",cv2.IMREAD_COLOR)
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
width,height = img.shape
print(width,height)
fudiao_img = np.zeros_like(img)
for row in range(width):
    for col in range(height-1):
        gray0 = img[row,col]
        gray1 = img[row,col+1]
        gray = int(gray0)-int(gray1)+120
        if gray<0:
            gray = 0 
        if gray>255:
            gray = 255
        fudiao_img[row,col] = gray

imgshow(fudiao_img)
相关推荐
予枫的编程笔记18 小时前
Agent 到底是什么?从架构演进看 AI Agent 的工程定义
人工智能·agent·harness·agent的演进
成都渲染101云渲染666621 小时前
如何在3ds Max中实现更快、更高质量的渲染
前端·javascript·人工智能
十铭忘1 天前
MOTIONGPT3:人类运动作为第二模态
人工智能
weigangwin1 天前
采用 mem0 之前,先决定 Agent 到底允许记住什么
人工智能·opencv·ai·llm·memory·ai agent·mem0
木木学AI1 天前
AI客服系统技术选型:Agentic架构与传统规则引擎的能力差异评估
人工智能·架构
hhzz1 天前
Python大数据实战(十六):音乐推荐系统——基于协同过滤算法构建个性化歌单引擎
大数据·人工智能·python·数据挖掘·数据分析
带娃的IT创业者1 天前
突破算力与安全的边界:深度解析 Mythos AI 的“受信发布”机制与技术影响
人工智能·安全·大语言模型·ai安全·mythos ai·受信发布·ai监管
dreamread1 天前
2026紫微八字同排工具怎么选:看盘面切换、功能边界和学习路径
人工智能·软件工具·传统文化
耍酷的魔镜1 天前
核心设计理念:5W2H、JSON-LD 与通用知识图谱
人工智能·json·知识图谱
星河耀银海1 天前
大模型安全:对抗攻击与防御方法
人工智能·安全·大模型