pub struct OpenCvCaptureDevice { /* private fields */ }
Available on crate feature input-opencv only.
Expand description

The backend struct that interfaces with OpenCV. Note that an opencv matching the version that this was either compiled on must be present on the user’s machine. (usually 4.5.2 or greater) For more information, please see opencv-rust and OpenCV VideoCapture Docs.

To see what this does, please see CaptureBackendTrait

Quirks

  • Some features don’t work properly on this backend (yet)! Setting Resolution, FPS, FrameFormat does not work and will default to 640x480 30FPS. This is being worked on.
  • This is a cross-platform backend. This means that it will work on most platforms given that OpenCV is present.
  • This backend can also do IP Camera input.
  • The backend’s backend will default to system level APIs on Linux(V4L2), Mac(AVFoundation), and Windows(Media Foundation). Otherwise, it will decide for itself.
  • If the OpenCvCaptureDevice is initialized as a IPCamera, the CameraFormat’s index value will be u32::MAX (4294967295).
  • OpenCV does not support camera querying. Camera Name and Camera supported resolution/fps/fourcc is a UnsupportedOperationError. Note: resolution(), frame_format(), and frame_rate() is not affected.
  • CameraInfo’s human name will be “OpenCV Capture Device {location}”
  • CameraInfo’s description will contain the Camera’s Index or IP.
  • The API Preference order is the native OS API (linux => v4l2, mac => AVFoundation, windows => MSMF) than CAP_AUTO

Implementations§

source§

impl OpenCvCaptureDevice

source

pub fn new( index: &CameraIndex, cam_fmt: RequestedFormat<'_> ) -> Result<Self, NokhwaError>

Creates a new capture device using the OpenCV backend.

Indexes are gives to devices by the OS, and usually numbered by order of discovery.

IPCameras follow the format

<protocol>://<IP>:<port>/

, but please refer to the manufacturer for the actual IP format.

Errors

If the backend fails to open the camera (e.g. Device does not exist at specified index/ip), Camera does not support specified CameraFormat, and/or other OpenCV Error, this will error.

Panics

If the API u32 -> i32 fails this will error

source

pub fn is_ip_camera(&self) -> bool

Gets weather said capture device is an IPCamera.

source

pub fn is_index_camera(&self) -> bool

Gets weather said capture device is an OS-based indexed camera.

source

pub fn camera_location(&self) -> &CameraIndex

Gets the camera location

source

pub fn opencv_preference(&self) -> i32

Gets the OpenCV API Preference number. Please refer to OpenCV VideoCapture Flag Docs.

source

pub fn raw_frame_vec(&mut self) -> Result<Cow<'_, [u8]>, NokhwaError>

Gets the RGB24 frame directly read from OpenCV without any additional processing.

Errors

If the frame is failed to be read, this will error.

source

pub fn raw_resolution(&self) -> Result<Resolution, NokhwaError>

Gets the resolution raw as read by OpenCV.

Errors

If the resolution is failed to be read (e.g. invalid or not supported), this will error.

source

pub fn raw_framerate(&self) -> Result<u32, NokhwaError>

Gets the framerate raw as read by OpenCV.

Errors

If the framerate is failed to be read (e.g. invalid or not supported), this will error.

Trait Implementations§

source§

impl CaptureBackendTrait for OpenCvCaptureDevice

source§

fn backend(&self) -> ApiBackend

Returns the current backend used.
source§

fn camera_info(&self) -> &CameraInfo

Gets the camera information such as Name and Index as a CameraInfo.
source§

fn refresh_camera_format(&mut self) -> Result<(), NokhwaError>

Forcefully refreshes the stored camera format, bringing it into sync with “reality” (current camera state) Read more
source§

fn camera_format(&self) -> CameraFormat

Gets the current CameraFormat. This will force refresh to the current latest if it has changed.
source§

fn set_camera_format( &mut self, new_fmt: CameraFormat ) -> Result<(), NokhwaError>

Will set the current CameraFormat This will reset the current stream if used while stream is opened. Read more
source§

fn compatible_list_by_resolution( &mut self, _fourcc: FrameFormat ) -> Result<HashMap<Resolution, Vec<u32>>, NokhwaError>

A hashmap of Resolutions mapped to framerates. Not sorted! Read more
source§

fn compatible_fourcc(&mut self) -> Result<Vec<FrameFormat>, NokhwaError>

A Vector of compatible FrameFormats. Will only return 2 elements at most. Read more
source§

fn resolution(&self) -> Resolution

Gets the current camera resolution (See: Resolution, CameraFormat). This will force refresh to the current latest if it has changed.
source§

fn set_resolution(&mut self, new_res: Resolution) -> Result<(), NokhwaError>

Will set the current Resolution This will reset the current stream if used while stream is opened. Read more
source§

fn frame_rate(&self) -> u32

Gets the current camera framerate (See: CameraFormat). This will force refresh to the current latest if it has changed.
source§

fn set_frame_rate(&mut self, new_fps: u32) -> Result<(), NokhwaError>

Will set the current framerate This will reset the current stream if used while stream is opened. Read more
source§

fn frame_format(&self) -> FrameFormat

Gets the current camera’s frame format (See: FrameFormat, CameraFormat). This will force refresh to the current latest if it has changed.
source§

fn set_frame_format(&mut self, fourcc: FrameFormat) -> Result<(), NokhwaError>

Will set the current FrameFormat This will reset the current stream if used while stream is opened. Read more
source§

fn camera_control( &self, control: KnownCameraControl ) -> Result<CameraControl, NokhwaError>

Gets the value of KnownCameraControl. Read more
source§

fn camera_controls(&self) -> Result<Vec<CameraControl>, NokhwaError>

Gets the current supported list of KnownCameraControl Read more
source§

fn set_camera_control( &mut self, id: KnownCameraControl, value: ControlValueSetter ) -> Result<(), NokhwaError>

Sets the control to control in the camera. Usually, the pipeline is calling camera_control(), getting a camera control that way then calling value() to get a ControlValueSetter and setting the value that way. Read more
source§

fn open_stream(&mut self) -> Result<(), NokhwaError>

Will open the camera stream with set parameters. This will be called internally if you try and call frame() before you call open_stream(). Read more
source§

fn is_stream_open(&self) -> bool

Checks if stream if open. If it is, it will return true.
source§

fn frame(&mut self) -> Result<Buffer, NokhwaError>

Will get a frame from the camera as a Buffer. Depending on the backend, if you have not called open_stream() before you called this, it will either return an error. Read more
source§

fn frame_raw(&mut self) -> Result<Cow<'_, [u8]>, NokhwaError>

Will get a frame from the camera without any processing applied, meaning you will usually get a frame you need to decode yourself. Read more
source§

fn stop_stream(&mut self) -> Result<(), NokhwaError>

Will drop the stream. Read more
source§

fn compatible_camera_formats( &mut self ) -> Result<Vec<CameraFormat, Global>, NokhwaError>

Gets the compatible CameraFormat of the camera Read more
source§

fn decoded_buffer_size(&self, alpha: bool) -> usize

The minimum buffer size needed to write the current frame. If alpha is true, it will instead return the minimum size of the buffer with an alpha channel as well. This assumes that you are decoding to RGB/RGBA for FrameFormat::MJPEG or FrameFormat::YUYV and Luma8/LumaA8 for FrameFormat::GRAY
source§

fn frame_texture<'a>( &mut self, device: &Device, queue: &Queue, label: Option<&'a str> ) -> Result<Texture, NokhwaError>

Available on crate feature wgpu-types only.
Directly copies a frame to a Wgpu texture. This will automatically convert the frame into a RGBA frame. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>