探索视觉错觉与Python编程

在2019年,互联网上流传着一种视觉错觉,这种错觉让眼睛和大脑产生了混淆。一张看似色彩丰富的图片,实际上是灰色的!这种错觉是如何产生的呢?让一起深入了解。首先,将探讨不同类型的视觉错觉,然后学习如何用Python编程实现它们。

视觉错觉的类型

视觉错觉是指眼睛和大脑对视觉信息的解释与实际物理刺激不符的现象。以下是一些著名的视觉错觉:

在这个错觉中,看到了黑白条纹交替出现,但不仅如此,部分黑白条纹被灰色所替代。认为这些灰色部分是两种不同的阴影,还是同一种?大多数人会看到两种不同的灰色阴影,但实际上它们是同一种灰色。

Munker错觉是上述错觉的彩色版本。当一个区域被彩色包围,并且两者都被彩色格栅部分遮挡时,该区域看起来会被格栅的颜色同方向染色(同化),以及与包围颜色相反的方向染色(对比)。

以下是一些色彩错觉的分类,通过下面的插图可以更清楚地理解。

Python中的视觉错觉编程

可以将视觉错觉分为两部分:灰度图像和彩色网格。彩色网格上的线条颜色是造成错觉的关键,决定了大脑如何填充图像的颜色。将使用以下图像来创建错觉。

import matplotlib.pyplot as plt import cv2 as cv import numpy as np # 加载图像 img = cv.imread('path_to_image.jpg') mask = cv.imread('path_to_mask.jpg') # 显示图像 plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB)) plt.show() # 将图像转换为灰度 img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) # 创建错觉所需的彩色网格线 # 这里尝试了不同类型的网格,以查看网格类型是否对错觉有影响 test = img.copy() # 创建原始图像的副本 mm = ~mask[:,:,0] # 反转掩码 count = 0 for i in range(mask.shape[0]): for j in range(mask.shape[1]): if mm[i,j] == 0: # 掩码像素是黑色 test[i,j,0] = img_gray[i,j] test[i,j,1] = img_gray[i,j] test[i,j,2] = img_gray[i,j] count += 1

完整的Python代码片段

import matplotlib.pyplot as plt import cv2 as cv import numpy as np # 加载图像 img = cv.imread('path_to_image.jpg') mask = cv.imread('path_to_mask.jpg') # 显示图像 plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB)) plt.show() # 将图像转换为灰度 img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) test = img.copy() # 创建原始图像的副本 mm = ~mask[:,:,0] # 反转掩码 count = 0 for i in range(mask.shape[0]): for j in range(mask.shape[1]): if mm[i,j] == 0: # 掩码像素是黑色 test[i,j,0] = img_gray[i,j] test[i,j,1] = img_gray[i,j] test[i,j,2] = img_gray[i,j] count += 1
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485