2、请利用所讲知识点,利用摄像头及相关功能函数,实现镜头抓拍功能,并利用键盘按1次a键,给图片添加高斯噪音,按1次b键,给图片添加椒盐噪音,按1次c键给图片添加泊松噪音,添加完后分别显示出来。
时间: 2024-11-03 07:13:49 浏览: 25
为了实现这个功能,我们将使用Python的`cv2`库来处理摄像头捕获的视频流,同时结合`numpy`库来添加各种类型的噪声。首先确保已经安装了这两个库,如果没有安装,可以使用`pip install opencv-python numpy`。
以下是一个简单的Python脚本,实现了摄像头捕获、按'a'键添加高斯噪声,按'b'键添加椒盐噪声,按'c'键添加泊松噪声的功能:
```python
import cv2
import numpy as np
def add_gaussian_noise(img):
noise = np.random.normal(0, 10, img.shape).astype(np.float32) # 高斯噪声,默认标准差10
noisy_img = img + noise
return noisy_img.astype(np.uint8)
def add_salt_pepper_noise(img):
s_vs_p = 0.5 # 盐与椒的比例
amount = 0.004 # 产生噪点的比例
out = np.copy(img)
# Salt模式
num_salt = np.ceil(amount * img.size * s_vs_p)
coords = [np.random.randint(0, i - 1, int(num_salt)) for i in img.shape]
out[coords] = 255
# Pepper模式
num_pepper = np.ceil(amount* img.size * (1.0 - s_vs_p))
coords = [np.random.randint(0, i - 1, int(num_pepper)) for i in img.shape]
out[coords] = 0
return out
def add_poisson_noise(img):
vals = len(np.unique(img))
vals = 2 ** np.ceil(np.log2(vals))
noisy = np.random.poisson(img * vals) / float(vals)
return noisy
cap = cv2.VideoCapture(0) # 使用默认摄像头
ret, frame = cap.read()
while True:
key = cv2.waitKey(1) & 0xFF
if key == ord('a'):
noisy_frame = add_gaussian_noise(frame)
cv2.imshow("Gaussian Noise", noisy_frame)
elif key == ord('b'):
noisy_frame = add_salt_pepper_noise(frame)
cv2.imshow("Salt and Pepper Noise", noisy_frame)
elif key == ord('c'):
noisy_frame = add_poisson_noise(frame)
cv2.imshow("Poisson Noise", noisy_frame)
else:
cv2.imshow("Camera Feed", frame)
if key == ord('q'): # 按'q'退出循环
break
cap.release()
cv2.destroyAllWindows()
```
在这个脚本中,我们首先读取摄像头帧,然后在循环中检查接收到的按键。按下'a', 'b', 或 'c'时,相应的噪声会被添加到当前帧上,然后显示。当按下'q'键时,程序会退出。
阅读全文