Hello, I'm working on a project for my mechatronics engineering course where I need to detect circles in real time using a Raspberry Pi 4 Model B with a Raspberry Pi Rev 1.3 camera. I have configured the entire environment and ensured that the Raspberry correctly detects the camera. I have also reinstalled OpenCV and made the necessary updates.
The problem arises when trying to capture video with OpenCV. I'm getting several warning messages related to GStreamer and a fatal error when trying to convert the captured frame to grayscale, telling me that the frame is probably empty or not being captured correctly. Here is the code I am using and the specific errors I am getting:
Mistakes:I have verified that the camera works correctly outside of OpenCV and that updates are up-to-date. Has anyone faced a similar issue or have any suggestions on how to resolve these GStreamer errors and ensure video capture works properly?
I appreciate any help or suggestions you can offer.
The problem arises when trying to capture video with OpenCV. I'm getting several warning messages related to GStreamer and a fatal error when trying to convert the captured frame to grayscale, telling me that the frame is probably empty or not being captured correctly. Here is the code I am using and the specific errors I am getting:
Code:
import cv2import numpy as np# Video capturecap = cv2.VideoCapture(0)# Adjust image resolution (optional)cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)# Defines a color range to detect red circleslower_red = np.array([160, 50, 50])upper_red = np.array([180, 255, 255])while True: # Get the current frame of the camera ret, frame = cap.read() # Convert the frame to grayscale gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # Apply Gaussian smoothing filter blurred = cv2.GaussianBlur(gray, (5, 5), 0) # Detect edges in blurred image edges = cv2.Canny(blurred, 50, 150) # Search for circles in the border image circles = cv2.HoughCircles(edges, cv2.HOUGH_GRADIENT, dp=1, minDist=100, param1=100, param2=30) # Draw the circles detected in the original frame if circles is not None: for (x, y, r) in circles[0]: cv2.circle(frame, (int(x), int(y)), int(r), (0, 255, 0), 2) # Shows the frame with the detected circles cv2.imshow('Circle detection', frame) # If the 'q' key is pressed, the window is closed if cv2.waitKey(1) & 0xFF == ord('q'): break# Release the camera and close all the windowscap.release()cv2.destroyAllWindows()
Mistakes:
Code:
[ WARN:0@0.339] global ./modules/videoio/src/cap_gstreamer.cpp (2401) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src0 reported: Failed to allocate required memory.[ WARN:0@0.340] global ./modules/videoio/src/cap_gstreamer.cpp (1356) open OpenCV | GStreamer warning: unable to start pipelinecv2.error: OpenCV(4.6.0) ./modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'
I appreciate any help or suggestions you can offer.
Statistics: Posted by Baladier — Sat Apr 13, 2024 2:44 am