Python用cv2实现Mac拍照亭功能时报错numpy.ndarray无release属性如何解决
报错原因
你调用了frame.release(),但frame是cam.read()返回的图像帧,属于numpy.ndarray类型,不存在release方法。release()是cv2.VideoCapture实例的专属方法,用来释放占用的摄像头硬件资源,不能用在帧对象上。
另外你原有代码还有两处不符合需求的问题:
- 没有实现每隔1秒拍摄的逻辑
- 循环内重复调用
cv2.destroyAllWindows()无意义,拍摄完成后也没有释放摄像头资源
修复后完整代码
import cv2 import random import time num = random.randint(0,2000) cam = cv2.VideoCapture(0) cv2.namedWindow("Mac") def concat_tile(im_list_2d): return cv2.vconcat([cv2.hconcat(im_list_h) for im_list_h in im_list_2d]) x = [] for i in range(4): ret, frame = cam.read() if not ret: print("摄像头读取失败") break # 实时显示拍摄画面 cv2.imshow("Mac", frame) cv2.waitKey(1) x.append(frame) # 间隔1秒拍摄下一张 time.sleep(1) # 所有拍摄完成后释放摄像头 cam.release() cv2.destroyAllWindows() # 确保读取到4张帧再拼接 if len(x) == 4: im_v = concat_tile([[x[0],x[1]], [x[2],x[3]]]) img_name = "opencv_frame_{}.png".format(num) cv2.imwrite(img_name, im_v)
内容的提问来源于stack exchange,提问作者OCOVALOCO
相关产品推荐
相关产品推荐

