This may be due to the absence cv::waitKey(0), and the window does not refresh, although it is odd.
Try adding a command cv::waitKeyafter imshow like this
import cv2
cap = cv2.VideoCapture(0)
cv2.namedWindow('frame', cv2.WINDOW_NORMAL)
while True:
key = cv2.waitKey(0) & 0xFF
ret, frame = cap.read()
cv2.imshow('frame', frame)
cv2.waitKey(0)
if key == ord('q'):
cap.release()
cv2.destroyAllWindows()
break
if key == ord('c'):
cv2.imwrite('capture.jpg', frame)
cap.release()
cv2.destroyAllWindows()
, , imwrite, while ( ), - opencv.