
    9im-                         S r SSKrSSKJr  SSKJrJrJrJrJ	r	  SSK
r
SSKrSSKJr  SSKJrJrJr  SSKJrJr  SS	KJr   " S
 S\5      rg)ag  Read/Write images using OpenCV.

Backend Library: `OpenCV <https://opencv.org/>`_

This plugin wraps OpenCV (also known as ``cv2``), a popular image processing
library. Currently, it exposes OpenCVs image reading capability (no video or GIF
support yet); however, this may be added in future releases.

Methods
-------
.. note::
    Check the respective function for a list of supported kwargs and their
    documentation.

.. autosummary::
    :toctree:

    OpenCVPlugin.read
    OpenCVPlugin.iter
    OpenCVPlugin.write
    OpenCVPlugin.properties
    OpenCVPlugin.metadata

Pixel Formats (Colorspaces)
---------------------------

OpenCV is known to process images in BGR; however, most of the python ecosystem
(in particular matplotlib and other pydata libraries) use the RGB. As such,
images are converted to RGB, RGBA, or grayscale (where applicable) by default.

    N)Path)AnyDictListOptionalUnion   )Request)	URI_BYTESInitializationErrorIOMode)ImagePropertiesPluginV3)	ArrayLikec            
         ^  \ rS rSrS\SS4U 4S jjrSS\R                  S.S\S\	\\
4   S	\S\R                  4S
 jjrS\R                  4S\	\\
4   S	\S\R                  4S jjr  SS\	\\\   4   S\S\\   S\\   4S jjrSS\R                  4S\S\	\\
4   S	\S\4S jjr SS\S\S\\
\4   4S jjrSrU =r$ )OpenCVPlugin.   requestreturnNc                   > [         TU ]  U5        UR                  5       U l        UR                  [
        L a  SU l        OUR                  U l        UR                  R                  nU[        R                  :X  a>  [        R                  " U R                  5      (       d  [        SU R                   S35      eU[        R                  :X  a?  [        R                   " U R                  5      (       d  [        SU R                   S35      eg g )Nz<bytes>zOpenCV can't read ``.zOpenCV can't write to `)super__init__get_local_filenamefile_handle	_uri_typer   filenameraw_urimodeio_moder   readcv2haveImageReaderr   writehaveImageWriter)selfr   r   	__class__s      V/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/imageio/plugins/opencv.pyr   OpenCVPlugin.__init__/   s    !"557	)%DM#OODM||##6;;s':':4;K;K'L'L%(;DMM?"&MNNV\\!#*=*=d>N>N*O*O%(?b&QRR +P!    )index
colorspaceflagsr+   r,   r-   c          	      X   Uc+  [         R                  " U R                  U5      nUS:X  a  SOSnUSL a$  [         R                  " U R                  US9u  pVSnO%[         R                  " U R                  USUS9u  pVSnUSL a  [	        SU S	U R
                   S
35      eUS   R                  S:X  a  SnU=(       d    Sn	O1US   R                  S   S:X  a  SnU=(       d    Sn	OSnU=(       d    Sn	[        U[        5      (       a  Un
O<XR                  5       :X  a  Sn
O&U	R                  5       n	[        [         SU SU	 35      n
U
b<  [        R                  " U Vs/ s H  n[         R                  " X5      PM     sn5      nO[        R                  " U5      nU(       a  U$ US   $ s  snf )a  Read an image from the ImageResource.

Parameters
----------
index : int, Ellipsis
    If int, read the index-th image from the ImageResource. If ``...``,
    read all images from the ImageResource and stack them along a new,
    prepended, batch dimension. If None (default), use ``index=0`` if
    the image contains exactly one image and ``index=...`` otherwise.
colorspace : str, int
    The colorspace to convert into after loading and before returning
    the image. If None (default) keep grayscale images as is, convert
    images with an alpha channel to ``RGBA`` and all other images to
    ``RGB``. If int, interpret ``colorspace`` as one of OpenCVs
    `conversion flags
    <https://docs.opencv.org/4.x/d8/d01/group__imgproc__color__conversions.html>`_
    and use it for conversion. If str, convert the image into the given
    colorspace. Possible string values are: ``"RGB"``, ``"BGR"``,
    ``"RGBA"``, ``"BGRA"``, ``"GRAY"``, ``"HSV"``, or ``"LAB"``.
flags : int
    The OpenCV flag(s) to pass to the reader. Refer to the `OpenCV docs
    <https://docs.opencv.org/4.x/d4/da8/group__imgcodecs.html#ga288b8b3da0892bd651fce07b3bbd3a56>`_
    for details.

Returns
-------
ndimage : np.ndarray
    The decoded image as a numpy array.

N   r   .)r-   TFzCould not read index `z` from `r   r	   GRAY   BGRARGBABGRRGBCOLOR_2)r"   imcountr   imreadmulti
ValueErrorr   ndimshape
isinstanceintuppergetattrnpstackcvtColor)r&   r+   r,   r-   n_imagesretvalimgis_batchin_colorspaceout_colorspace	cvt_spacexs               r(   r!   OpenCVPlugin.read>   s   L ={{4#3#3U;H!QACEC<//$*:*:%HKFH//$*:*:E1ERKFHU?5eWHT]]OSUVWWq6;;!"M'16NV\\"""M'16N!M'05Nj#&&"I2244I+113Nvm_An=M%NOI ((D1CLL6DEC((3-Cs*CF*	 Es    F'c              #      #    [        [        R                  " U R                  5      5       H  nU R	                  X2US9v   M     g7f)a  Yield images from the ImageResource.

Parameters
----------
colorspace : str, int
    The colorspace to convert into after loading and before returning
    the image. If None (default) keep grayscale images as is, convert
    images with an alpha channel to ``RGBA`` and all other images to
    ``RGB``. If int, interpret ``colorspace`` as one of OpenCVs
    `conversion flags
    <https://docs.opencv.org/4.x/d8/d01/group__imgproc__color__conversions.html>`_
    and use it for conversion. If str, convert the image into the given
    colorspace. Possible string values are: ``"RGB"``, ``"BGR"``,
    ``"RGBA"``, ``"BGRA"``, ``"GRAY"``, ``"HSV"``, or ``"LAB"``.
flags : int
    The OpenCV flag(s) to pass to the reader. Refer to the `OpenCV docs
    <https://docs.opencv.org/4.x/d4/da8/group__imgcodecs.html#ga288b8b3da0892bd651fce07b3bbd3a56>`_
    for details.

Yields
------
ndimage : np.ndarray
    The decoded image as a numpy array.

r+   r-   r,   N)ranger"   r9   r   r!   )r&   r,   r-   idxs       r(   iterOpenCVPlugin.iter   s8     < T%5%567C))#z)JJ 8s   AAndimagerH   paramsc                    [        U[        5      (       a  [        R                  " USS9nOU(       d  US   nUS   R                  S:X  a  SnOUS   R
                  S   nUS:X  a  U Vs/ s H  oUPM     nnOqUS:X  a6  U Vs/ s H(  n[        R                  " U[        R                  5      PM*     nnO5U Vs/ s H(  n[        R                  " U[        R                  5      PM*     nn[        R                  " U R                  Xc5      nUSL a  [        S	5      eU R                  R                  [        :X  a#  [!        U R                  5      R#                  5       $ g
s  snf s  snf s  snf )a  Save an ndimage in the ImageResource.

Parameters
----------
ndimage : ArrayLike, List[ArrayLike]
    The image data that will be written to the file. It is either a
    single image, a batch of images, or a list of images.
is_batch : bool
    If True, the provided ndimage is a batch of images. If False (default), the
    provided ndimage is a single image. If the provided ndimage is a list of images,
    this parameter has no effect.
params : List[int]
    A list of parameters that will be passed to OpenCVs imwrite or
    imwritemulti functions. Possible values are documented in the
    `OpenCV documentation
    <https://docs.opencv.org/4.x/d4/da8/group__imgcodecs.html#gabbc7ef1aa2edfaa87772f1202d67e0ce>`_.

Returns
-------
encoded_image : bytes, None
    If the ImageResource is ``"<bytes>"`` the call to write returns the
    encoded image as a bytes string. Otherwise it returns None.

r   )axis)N.r	   r/   r1   r2   FzOpenCV failed to write.N)r>   listrB   rC   r<   r=   r"   rD   COLOR_RGBA2BGRACOLOR_RGB2BGRimwritemultir   IOErrorr   r   r   r   
read_bytes)r&   rT   rH   rU   
n_channelsrL   ndimage_cv2rF   s           r(   r$   OpenCVPlugin.write   s0   > gt$$hhwQ/Gi(G1:??aJ ))"-J?&-.g1gK.K1_IPQA3<<3+>+>?KQKGNOw!3<<3+<+<=wKO!!$"2"2KHU? 344<<!!Y.(()4466 / /QOs   *E/E!8/E&c                    Uc'  [         R                  " U R                  U5      nUS:  nO/U[        L a$  [         R                  " U R                  U5      nSnOSnU(       a4  U R	                  SX2S9n[        W/UR                  Q7UR                  USS9$ U R	                  XUS9n[        UR                  UR                  SS9$ )af  Standardized image metadata.

Parameters
----------
index : int, Ellipsis
    If int, get the properties of the index-th image in the
    ImageResource. If ``...``, get the properties of the image stack
    that contains all images. If None (default), use ``index=0`` if the
    image contains exactly one image and ``index=...`` otherwise.
colorspace : str, int
    The colorspace to convert into after loading and before returning
    the image. If None (default) keep grayscale images as is, convert
    images with an alpha channel to ``RGBA`` and all other images to
    ``RGB``. If int, interpret ``colorspace`` as one of OpenCVs
    `conversion flags
    <https://docs.opencv.org/4.x/d8/d01/group__imgproc__color__conversions.html>`_
    and use it for conversion. If str, convert the image into the given
    colorspace. Possible string values are: ``"RGB"``, ``"BGR"``,
    ``"RGBA"``, ``"BGRA"``, ``"GRAY"``, ``"HSV"``, or ``"LAB"``.
flags : int
    The OpenCV flag(s) to pass to the reader. Refer to the `OpenCV docs
    <https://docs.opencv.org/4.x/d4/da8/group__imgcodecs.html#ga288b8b3da0892bd651fce07b3bbd3a56>`_
    for details.

Returns
-------
props : ImageProperties
    A dataclass filled with standardized image metadata.

Notes
-----
Reading properties with OpenCV involves decoding pixel data, because
OpenCV doesn't provide a direct way to access metadata.

r/   TFr   rO   )r=   dtyperE   rH   )r=   rb   rH   )r"   r9   r   Ellipsisr!   r   r=   rb   )r&   r+   r,   r-   rE   rH   rG   s          r(   
propertiesOpenCVPlugin.properties   s    T ={{4#3#3U;H!|Hh{{4#3#3U;HHH ))!5)HC",#)),ii!	  iieZiHSYYcii%PPr*   exclude_appliedc                 L    [         R                  " S[        5        [        5       $ )a  Format-specific metadata.

.. warning::
    OpenCV does not support reading metadata. When called, this function
    will raise a ``NotImplementedError``.

Parameters
----------
index : int
    This parameter has no effect.
exclude_applied : bool
    This parameter has no effect.

z)OpenCV does not support reading metadata.)warningswarnUserWarningdict)r&   r+   rf   s      r(   metadataOpenCVPlugin.metadata&  s    $ 	A;Ovr*   )r   r   )FN)NT)__name__
__module____qualname____firstlineno__r
   r   r"   IMREAD_COLORr?   r   strrB   ndarrayr!   rR   r   r   boolr   bytesr$   r   rd   r   r   rl   __static_attributes____classcell__)r'   s   @r(   r   r   .   sl   S SD S$ &*%%K+ K+ #s(O	K+
 K+ 
K+^ '+%%K#s(OK K 
	KH  	87y$y/1287 87 S		87
 
%87x &*%%	>Q>Q #s(O>Q 	>Q
 
>QB :>26	c3h r*   r   )__doc__rh   pathlibr   typingr   r   r   r   r   r"   numpyrB   corer
   core.requestr   r   r   core.v3_plugin_apir   r   r   r    r*   r(   <module>r      s<   @   3 3 
   A A : K8 Kr*   