网站首页 > 技术文章 正文
项目介绍
大家好,又到了愉快的周末,前段时间再B站看到一个骚操作。
图片缩小后 内容竟变得完全不同!妥妥的加密神技,背后的原理是我们图像处理中的常用操作。最近邻插值的妙用!
视频来源:https://www.bilibili.com/video/BV1Lf4y1r7dZ
原理分享
通过放大图片观察可以看到,其实在大图上面存在一些貌似有规律的点,如下所示:
实际上这些点是组成 小图 的点
当对大图进行缩小时,图片显示的结果就是上面一些小点。
那么的大家肯定会有疑问:
1、为什么插入的点,缩小后会变成完全不同的图
2、如何将这些点插入进去
1、为什么插入的点,缩小后会变成完全不同的图
这里需要提前讲解一下图像缩放的原理(知识点!):
图像缩放(image scaling)是指对数字图像的大小进行调整的过程。
这里涉及到的图片的缩小,即从较大尺寸的图片转换为较小尺寸的图片。
这里仅介绍最近邻法插值:
概念:将变换后的图像中的原像素点最邻近像素的灰度值赋给原像素点的方法。
下面这张图可以清晰解释最近邻的实现原理(放大的情况)
下面这张图可以清晰解释最近邻的实现原理(缩小的情况)
假设原图如下所示,图片的尺寸是 3 x 9
此时,在使用最近邻缩放时,且缩放的倍数为 3 时,会默认时用中间的红色方块来代替,进行三倍缩小后的最终效果如下:
使用这种方法来显示你想要实现的效果有两个条件:
1、缩放时采用最近邻缩放
2、已知缩放的倍率或尺寸
这里作者给的demo 都是缩放 10 倍的,如果图片的尺寸有区别需要自定义。
使用上面的骚操作,还能干坏事呢。不,还能干什么大事呢?
比如,学习资料的传播
表面上是一张妹子的图,缩放后:
是一份正经的学习资料!
就问你服不服!‘
代码如下:
import sys
from PIL import Image
#将small_img中的像素用近邻法嵌入到big_img中
def my_nearest_resize(big_img, small_img):
big_w, big_h = big_img.size
small_w, small_h = small_img.size
dst_im = big_img.copy()
stepx = big_w/small_w
stepy = big_h/small_h
for i in range(0, small_w):
for j in range(0, small_h):
map_x = int( i*stepx + stepx*0.5 )
map_y = int( j*stepy + stepy*0.5 )
if map_x < big_w and map_y < big_h :
dst_im.putpixel( (map_x, map_y), small_img.getpixel( (i, j) ) )
return dst_im
if __name__ == '__main__':
big_img=Image.open(sys.argv[1]) # 大图
small_img=Image.open(sys.argv[2]) # 小图
dst_im = my_nearest_resize(big_img, small_img)
dst_im.save(sys.argv[3]) # 嵌入小图像素的大图
项目链接:https://github.com/3150601355/SimpleScaleDown
视频来源:https://www.bilibili.com/video/BV1Lf4y1r7dZ
本文是在这位仁兄上面学到的,佩服佩服!
猜你喜欢
- 2024-10-12 亳州的芍药 亳州的芍药花开了吗
- 2024-10-12 豆角不能挨着什么种?冤家菜的禁忌,你一定要知道!
- 2024-10-12 复旦大学发布Grad-PU:任意尺度的点云上采样(附代码)
- 2024-10-12 “马上进服务区了,我没扛住,睡着了……”
- 2024-10-12 隣、横、側(そば)到底有什么区别?老王画圈圈告诉你!
- 2024-10-12 春季怎样选一款插排满足取暖与日常使用——绿联新国标排插初体验
- 2024-10-12 不,MS-DOS游戏并非宽屏的:纠正宽高比的建议
- 2024-10-12 真正实用的退化模型:ETH开源业内首个广义盲图像超分退化模型
- 2024-10-12 阿里巴巴Poster论文:处理多种退化类型的卷积超分辨率|CVPR 2018
- 2024-10-12 [OpenCV实战]44 使用OpenCV进行图像超分放大
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)