Ask Your Question
0

Unable to see and take the picture in second time

asked 2019-12-02 04:12:39 -0500

Tintuk Tomin gravatar image

updated 2019-12-02 04:54:40 -0500

supra56 gravatar image

Code:

import cv2

def method_webcam_trigger()

    key = cv2. waitKey(1)
    webcam = cv2.VideoCapture(0)
    while True:
        try:
            check, frame = webcam.read()
            cv2.imshow("Capturing", frame)
            key = cv2.waitKey(1)
            if key == ord('s'): 
                cv2.imwrite(filename='saved_img.jpg', img=frame)
                webcam.release()
                cv2.waitKey(1650)
                cv2.destroyAllWindows()
                print("Image saved!")
                webcam.release()
                cv2.destroyAllWindows()
                break
            elif key == ord('q'):
                webcam.release()
                cv2.destroyAllWindows()
                break

Abouve the code which am using. I wrote the code to take the picture in a function and the function will activate in a button click. If i click on a button then the button will call this particular function(method_webcam_trigger) and save the picture. The problem is that if i click on that button again then it wont work. if i click the button on second time then the execution will stop on below line.

cv2.imshow("Capturing", frame)

Can anybody help to solve this? Below is another link which i saw asking the same question, but did't find the answer. https://stackoverflow.com/questions/2... Please help. Thankyou

edit retag flag offensive close merge delete

Comments

1

you cannot open twice VideoCapture. Is Videocapture already opened?

LBerger gravatar imageLBerger ( 2019-12-02 04:22:41 -0500 )edit

don't release the webcam ;)

berak gravatar imageberak ( 2019-12-02 04:22:46 -0500 )edit

@LBerger saying that you cannot open twice VideoCapture. Is Videocapture already opened. Look at what're you doing in function of method_webcam_trigger. Move webcam = cv2.VideoCapture(0) out of method_webcam_trigger, And put it on top of method_webcam_trigger.

supra56 gravatar imagesupra56 ( 2019-12-02 04:41:31 -0500 )edit

By clicking button will not work. Youre doing wrong. I need to see your button click event code.

supra56 gravatar imagesupra56 ( 2019-12-02 04:47:03 -0500 )edit

@berak. Listen to @LBerger. It will not work.

supra56 gravatar imagesupra56 ( 2019-12-02 04:56:06 -0500 )edit
1

@Supra, apologies, you're right

berak gravatar imageberak ( 2019-12-02 05:03:41 -0500 )edit

@berak. No problem. I already done this before.

supra56 gravatar imagesupra56 ( 2019-12-02 05:06:15 -0500 )edit

@LBerger@berak @ Supra Thanks for your comments. But the problem remains there. I tried to take out webcam = cv2.VideoCapture(0) outside the function. But still the same.

Tintuk Tomin gravatar imageTintuk Tomin ( 2019-12-02 06:45:55 -0500 )edit

If i call the function again the excution will stops on this line cv2.imshow("Capturing", frame)

Tintuk Tomin gravatar imageTintuk Tomin ( 2019-12-02 06:49:53 -0500 )edit

2 answers

Sort by ยป oldest newest most voted
0

answered 2019-12-02 04:24:43 -0500

mvuori gravatar image

You destroy your camera when you save the image so obviously getting the bext frame fails.

edit flag offensive delete link more

Comments

If i dont destroy the camera the window will be there. It wont be closed and the webcam will work all the time. I need to start the webcam and take the the picture using the function call.

Tintuk Tomin gravatar imageTintuk Tomin ( 2019-12-02 06:48:15 -0500 )edit
0

answered 2019-12-02 09:17:47 -0500

supra56 gravatar image

I noticed that you left out semi-colon in line 3. Also your're missing Trap/except. When you click button s, you didn't called method method_webcam_trigger(). As @berak said, by removing release was wrong. I also added waitKey for 10 seconds. But remember, by clicking button s, you saved filename saved_img.jpg. When you clicking buitton again, it asking you to save as. So click filename, you will add index...saved_img1.jpg, and so on.

#!/usr/bin/env python37
#Raspberry pi 3/4, OpenCV 4.1.2
#Date: December 2nd, 2019

import cv2

def method_webcam_trigger():
    key = cv2. waitKey(10)
    webcam = cv2.VideoCapture(0)
    while True:
        try:
            check, frame = webcam.read()
            cv2.imshow("Capturing", frame)
            key = cv2.waitKey(1)
            if key == ord('s'): 
                cv2.imwrite(filename='saved_img.jpg', img=frame)
                print("Image saved!")
                webcam.release()
                cv2.destroyAllWindows()
                cv2.waitKey(10)
                method_webcam_trigger()
                webcam.release()
                cv2.destroyAllWindows()
                cv2.waitKey(10)               
                break                
            elif key == ord('q'):                 
                webcam.release()
                cv2.destroyAllWindows()
                break 
        except:
              pass

method_webcam_trigger()
edit flag offensive delete link more

Comments

@Tintuk Tomin . Your code is tricking. That was very nice. Before I posted answer in here I redo it and it saved 3000 filenames in cv2.waitKey(1650) seconds. But thanks.

supra56 gravatar imagesupra56 ( 2019-12-02 09:31:33 -0500 )edit

You can also change one second if you like cv2.waitKey(1).

supra56 gravatar imagesupra56 ( 2019-12-02 09:43:33 -0500 )edit
Login/Signup to Answer

Question Tools

1 follower

Stats

Asked: 2019-12-02 04:12:39 -0500

Seen: 47 times

Last updated: Dec 02