simplex-noise简单的动画demo

这篇博客分享了一个使用simplex-noise.js库创建的基于Canvas的HTML5动画特效,展示了如何制作出迷人的闪光效果。通过结合JavaScript和Canvas API,作者演示了如何利用Simplex噪声生成平滑且随机的视觉动画。

下载地址simplex-noise.js简单的动画demo效果,基于canvas的闪光html5动画特效。

1629946096.png

dd:

import cv2 import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] image_path = "C:/Users/Lenovo/Desktop/11.jpg" def load_image(image_path): img_bgr = cv2.imread(image_path) if img_bgr is None: raise FileNotFoundError(f"无法找到图片: {image_path}") img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB) return img_bgr, img_rgb # 添加高斯噪声 def add_gaussian_noise(image, mean=0, var=0.001): image = np.array(image / 255, dtype=float) noise = np.random.normal(mean, var ** 0.5, image.shape) noisy_image = image + noise noisy_image = np.clip(noisy_image, 0, 1) noisy_image = np.uint8(noisy_image * 255) return noisy_image # 添加椒盐噪声 def add_salt_pepper_noise(image, prob=0.02): output = np.zeros(image.shape, np.uint8) thres = 1 - prob for i in range(image.shape[0]): for j in range(image.shape[1]): rdn = np.random.random() if rdn < prob: output[i][j] = 0 # 椒噪声 elif rdn > thres: output[i][j] = 255 # 盐噪声 else: output[i][j] = image[i][j] return output # 显示噪声对比 def show_noise_comparison(original, gaussian_noisy, salt_pepper_noisy): plt.figure(figsize=(15, 5)) plt.subplot(131) plt.imshow(original) plt.title('原始图像') plt.axis('off') plt.subplot(132) plt.imshow(gaussian_noisy) plt.title('高斯噪声图像') plt.axis('off') plt.subplot(133) plt.imshow(salt_pepper_noisy) plt.title('椒盐噪声图像') plt.axis('off') plt.tight_layout() plt.show() # 滤波处理与显示(使用OpenCV窗口和滑动条) def filter_demo(image, noise_type="gaussian"): # 创建窗口 cv2.namedWindow('滤波效果对比', cv2.WINDOW_NORMAL) cv2.resizeWindow('滤波效果对比', 900, 600) # 初始核大小(必须为奇数) initial_kernel_size = 3 # 定义滑动条回调函数 def update_kernel_size(val): # 确保核大小为奇数且至少为3 kernel_size = val if val % 2 == 1 else val + 1 if kernel_size < 3: kernel_size = 3 # 应用三种滤波方法 mean_blur = cv2.blur(image, (kernel_size, kernel_size)) median_blur = cv2.medianBlur(image, kernel_size) gaussian_blur = cv2.GaussianBlur(image, (kernel_size, kernel_size), 0) # 在图像上显示当前核大小 mean_blur_text = cv2.putText(mean_blur.copy(), f'均值滤波, 核大小: {kernel_size}', (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 0), 2) median_blur_text = cv2.putText(median_blur.copy(), f'中值滤波, 核大小: {kernel_size}', (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 0), 2) gaussian_blur_text = cv2.putText(gaussian_blur.copy(), f'高斯滤波, 核大小: {kernel_size}', (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 0), 2) # 组合图像以便同时显示 top_row = np.hstack((mean_blur_text, median_blur_text)) bottom_row = np.hstack((gaussian_blur_text, cv2.putText(image.copy(), f'{noise_type}噪声原图', (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 2))) combined = np.vstack((top_row, bottom_row)) # 显示组合图像 cv2.imshow('滤波效果对比', combined) # 创建滑动条 cv2.createTrackbar('核大小', '滤波效果对比', initial_kernel_size, 31, update_kernel_size) # 初始化显示 update_kernel_size(initial_kernel_size) # 等待操作 print("请调整滑动条观察不同核大小的滤波效果,按ESC键退出") while True: key = cv2.waitKey(1) & 0xFF if key == 27: # ESC键退出 break cv2.destroyAllWindows() def main(): img_bgr, img_rgb = load_image('C:/Users/Lenovo/Desktop/11.jpg') # 替换为实际图片路径 # 添加两种噪声 gaussian_noisy_bgr = add_gaussian_noise(img_bgr) salt_pepper_noisy_bgr = add_salt_pepper_noise(img_bgr) # 转换为RGB用于matplotlib显示 gaussian_noisy_rgb = cv2.cvtColor(gaussian_noisy_bgr, cv2.COLOR_BGR2RGB) salt_pepper_noisy_rgb = cv2.cvtColor(salt_pepper_noisy_bgr, cv2.COLOR_BGR2RGB) # 显示噪声对比 show_noise_comparison(img_rgb, gaussian_noisy_rgb, salt_pepper_noisy_rgb) # 选择高斯噪声图像进行滤波演示(也可以改为椒盐噪声) filter_demo(gaussian_noisy_bgr, "高斯") # 如果想测试椒盐噪声,取消下面一行的注释 # filter_demo(salt_pepper_noisy_bgr, "椒盐") if __name__ == "__main__": main() 根据上面代码完善下面的要求 数据准备:读取一张清晰的图片,使用np.random.normal给图片添加高斯噪声,使用np.random给图片添加椒盐噪声,观察这两种噪声; 2. 任意选择一种噪声的图像,分别使用均值滤波(cv2.blur),中值滤波 (cv2.medianBlur)和高斯滤波(cv2.GaussianBlur)对图像进行滤波处理; 3. 使用cv2.createTrackbar()创建一个滑动条(Trackbar),用于动态调整滤波核的大小。用户拖动滑块时,程序实时更新滤波效果,即时显示当前核大小下的滤波结果图像。
10-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值