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

马赛克效果

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

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

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

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

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

 代码实现:

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]=colorimgshow(masaike_img)

毛玻璃效果

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

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

代码实现

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+offsetcolor_col = col+offsetif color_row>= shape[0]:color_row=shape[0]-1if color_col>=shape[1]:color_col=shape[1]-1color = img[color_row,color_col]maoboli_img[row,col] = color
imgshow(maoboli_img)

浮雕效果

梯度

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

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

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

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

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

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

gray = gray0-gray1+120

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

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

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

代码实现 
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)+120if gray<0:gray = 0 if gray>255:gray = 255fudiao_img[row,col] = grayimgshow(fudiao_img)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/616476.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【vue】跨组件通信--依赖注入

import { provide,inject } from vue provide&#xff1a;将父组件的数据传递给所有子组件&#xff08;子孙都有&#xff09;inject&#xff1a;接收provide 项目文件结构 App.vue是Header.vue的父组件&#xff0c;Header.vue是Nav.vue的父组件 传值过程 App.vue <tem…

从零实现诗词GPT大模型:专栏内容规划

一、前情介绍 本系列文章将从头编写一个类GPT的深度学习模型&#xff0c;并在诗词数据集上进行训练&#xff0c;从而可以进行诗词创作。 本次实现的类GPT模型&#xff0c;可以在kaggle上使用免费GPU进行训练&#xff0c;并可以在自己的电脑上进行推理&#xff0c;整个学习过程…

Visual Studio code无法正常执行Executing task: pnpm run docs:dev

最近尝试调试一个开源的项目&#xff0c;发现cmd可以正常启动&#xff0c;但是在vs中会报错&#xff0c;报错内容如下 Executing task: pnpm run docs:dev pnpm : 无法加载文件 E:\XXXX\pnpm.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 http…

【OTA】STM32新能源汽车OTA技术ymodem协议PC串口升级过程

【OTA】STM32新能源汽车OTA技术ymodem协议PC串口升级过程 文章目录 前言一、实验工具1.串口USB线——烧录APP2生成的BIN文件2.STLINK——烧录BOOT代码和APP1代码3.烧录工具——将BIN文件烧录到单片机中4.FLYMCU——清除芯片FLASH 二、硬件绘制1.原理图2.PCB 三、软件配置1.BOOT…

5.3 mybatis之autoMappingUnknownColumnBehavior作用

文章目录 1. NONE2. WARNING3. FAILING autoMappingUnknownColumnBehavior是< settings >配置下的属性&#xff0c;该属性是指定发现自动映射目标未知列&#xff08;或未知属性类型&#xff09;的行为。就是说当数据库中的字段找不到映射java对象的属性或者与java对象对应…

【Godot4.2】CanvasItem绘图函数全解析 - 6.TextLine和TextParagraph详解

概述 上一节讲述了CanvasItem内置文本绘制函数&#xff0c;以及TextLine和TextParagraph类&#xff0c;绘制单行和多行文本的基础内容。 但是实际上TextLine和TextParagraph类比我们想象的要功能丰富和强大的多。本节就来详细介绍一下。 系列目录 0.概述1.绘制简单图形2.设定…

【微信小程序——案例——本地生活(列表页面)】

案例——本地生活&#xff08;列表页面&#xff09; 九宫格中实现导航跳转——以汽车服务为案例&#xff08;之后可以全部实现页面跳转——现在先实现一个&#xff09; 在app.json中添加新页面 修改之前的九宫格view改为navitage 效果图&#xff1a; 动态设置标题内容—…

linux 部署安装mongodb教程

现在去官网下载mongodb的tar包,在本地创建文件夹 cd /home wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.17.tgz tar -zxvf mongodb-linux-x86_64-rhel70-4.2.17.tgz mv mongodb-linux-x86_64-rhel70-4.2.17 mongodb cd /home/mongodb mkdir log t…

计算机服务器中了360后缀勒索病毒怎么办?360后缀勒索病毒解密步骤

网络技术的不断应用与发展&#xff0c;为企业的生产运营提供了极大便利&#xff0c;利用网络可以开展各项工作业务&#xff0c;可以大大提高企业的生产效率&#xff0c;然而&#xff0c;网络是一把双刃剑&#xff0c;在为企业提供便利的同时&#xff0c;也为企业的数据安全带来…

机器学习——自动驾驶

本章我们主要学习以下内容: 阅读自动驾驶论文采集数据根据论文搭建自动驾驶神经网络训练模型在仿真环境中进行自动驾驶 论文介绍 本文参考自2016年英伟达发表的论文《End to End Learning for Self-Driving Cars》 📎end2end.pdf

装饰器模式:动态扩展对象功能的设计艺术

在面向对象设计中&#xff0c;装饰器模式是一种灵活的结构型模式&#xff0c;用于在不修改对象的基础上&#xff0c;动态地给一个对象添加额外的职责。这种模式通过创建一个包含原始对象的包装对象来实现功能的扩展&#xff0c;是继承关系的一个替代方案。本文将详细介绍装饰器…

ZooKeeper分布式服务与Kafka消息队列+ELKF整合方案

前言 ZooKeeper 是一个分布式的、开放源码的分布式应用程序协调服务&#xff0c;提供配置维护、命名服务、分布式同步、组服务等功能&#xff1b; Kafka 是一个开源的分布式流处理平台&#xff0c;它被设计用来处理实时数据流&#xff0c;包括发布和订阅消息系统、日志收集以…