我有以下代码,它对我来说效果很好,它的作用很简单。
本质上是验证是否连接了相机,如果可以,true
只需捕获照片并将其保存为photo.png,如果是则false
显示错误消息,到目前为止一切都很好,现在我需要做什么我刚拍的照片是去掉背景。
需要注意的是,背景永远是白色的,我用的是linux,但我觉得无关紧要。
import cv2
import numpy as np
from matplotlib import pyplot as plt
"""
En este caso, 0 quiere decir que queremos acceder
a la cámara 0. Si hay más cámaras, puedes ir probando
con 1, 2, 3...
"""
cap = cv2.VideoCapture(0)
read, frame = cap.read()
if read == True:
cv2.imwrite("foto.png", frame)
print("Foto tomada correctamente")
else:
print("Error al acceder a la cámara")
#Finalmente liberamos o soltamos la cámara
cap.release()
我已经大大改进了我的代码
除了去除背景并将其完全涂成白色
我已经放了一个
for
来拍摄你想要的照片数量,在这种情况下它会在范围内改变for acum in range(40):
并立即在Parameter 部分整理全白背景或我想要的颜色,它将照片保存在我定义img 的文件夹中。
MASK_COLOR = (1.0,1.0,1.0) # BGR 格式
我附上代码以防其他人在项目中需要它。
我依赖的帖子
我从http://benjamintan.io/blog/2018/05/24/making-transparent-backgrounds-with-numpy-and-opencv-in-python/带给你答案
您必须在代码中添加:
为图像添加alpha通道(注意颜色顺序:BGR 而不是 RGB),以及
找到白色的像素,即 BGR 中的 (255, 255, 255)。在同一行上替换颜色。
要更改不是完全白色的像素,您可以将上面的行更改为
其中 atol (
atol=200
) 的值表示该值的接近程度,其中 200 是一个相当高的值。我留给你完整的代码: