我想使用OpenCV从网络摄像头捕获并保存大量图像。这是我目前的代码:
import cv2
camera = cv2.VideoCapture(0)
for i in range(10):
return_value, image = camera.read()
cv2.imwrite('opencv'+str(i)+'.png', image)
del(camera)
这个问题是我不知道什么时候拍摄这些照片,所以很多照片都会模糊不清。我的问题是:是否可以通过点击键盘键拍摄图像?
还有更好的方法来拍摄多张图片,而不是范围吗?
答案 0 :(得分:31)
这是一个简单的程序,可以在cv2.namedWindow
中显示相机Feed,并在您点击SPACE
时拍摄快照。如果点击ESC
,它也会退出。
import cv2
cam = cv2.VideoCapture(0)
cv2.namedWindow("test")
img_counter = 0
while True:
ret, frame = cam.read()
cv2.imshow("test", frame)
if not ret:
break
k = cv2.waitKey(1)
if k%256 == 27:
# ESC pressed
print("Escape hit, closing...")
break
elif k%256 == 32:
# SPACE pressed
img_name = "opencv_frame_{}.png".format(img_counter)
cv2.imwrite(img_name, frame)
print("{} written!".format(img_name))
img_counter += 1
cam.release()
cv2.destroyAllWindows()
我认为这应该在很大程度上回答你的问题。如果有任何你不明白的行让我知道,我会添加评论。
如果每次按下SPACE
键需要抓取多张图像,则需要一个内循环,或者只需要创建一个抓取一定数量图像的函数。
请注意,关键事件来自cv2.namedWindow
,因此必须具有焦点。
答案 1 :(得分:3)
答案 2 :(得分:2)
我对open cv没有太多经验,但如果你想在按下某个键时调用for循环中的代码,你可以使用while循环和raw_input以及一个条件来防止循环永远执行
import cv2
camera = cv2.VideoCapture(0)
i = 0
while i < 10:
raw_input('Press Enter to capture')
return_value, image = camera.read()
cv2.imwrite('opencv'+str(i)+'.png', image)
i += 1
del(camera)
答案 3 :(得分:2)
分解您的代码示例
import cv2
导入openCV以供使用
camera = cv2.VideoCapture(0)
使用连接到计算机的摄像机列表中的第一个camrea创建一个名为camera的对象,类型为openCV视频捕获。
for i in range(10):
告诉程序循环以下缩进代码10次
return_value, image = camera.read()
使用它的读取方法从相机对象读取值。 它有2个值 将2个数据值保存到两个名为“return_value”和“image”
的临时变量中 cv2.imwrite('opencv'+str(i)+'.png', image)
使用openCV方法imwrite(将图像写入磁盘)并使用临时数据变量中的数据写入图像
更少的缩进意味着循环现在已经结束......
del(camera)
删除camrea对象,我们不再需要它。
你可以通过多种方式提出要求,一个可以用while循环替换for循环,(永远运行,而不是10次),然后等待按键(如danidee回答当我打字的时候)
或创建一个更加邪恶的服务,隐藏在后台并在每次有人按下键盘时捕获图像。
答案 4 :(得分:0)
这是一个简单的程序,可以使用笔记本电脑的默认相机捕获图像。我希望这对所有人来说都是非常简单的方法。
import cv2
# 1.creating a video object
video = cv2.VideoCapture(0)
# 2. Variable
a = 0
# 3. While loop
while True:
a = a + 1
# 4.Create a frame object
check, frame = video.read()
# Converting to grayscale
#gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
# 5.show the frame!
cv2.imshow("Capturing",frame)
# 6.for playing
key = cv2.waitKey(1)
if key == ord('q'):
break
# 7. image saving
showPic = cv2.imwrite("filename.jpg",frame)
print(showPic)
# 8. shutdown the camera
video.release()
cv2.destroyAllWindows
您可以看到我的github代码here