"""
Augmenters that apply mirroring/flipping operations to images.
List of augmenters:
* :class:`Fliplr`
* :class:`Flipud`
"""
from __future__ import print_function, division, absolute_import
import numpy as np
import cv2
import six.moves as sm
from imgaug.imgaug import _normalize_cv2_input_arr_
from . import meta
from .. import parameters as iap
# pylint:disable=pointless-string-statement
"""
Speed comparison by datatype and flip method.
HORIZONTAL FLIPS.
----------
bool
----------
slice 0.00052ms
slice, contig 0.21878ms
fliplr 0.00180ms
fliplr contig 0.22000ms
cv2 Error: Expected cv::UMat for argument 'src'
cv2 contig Error: Expected cv::UMat for argument 'src'
fort cv2 Error: Expected cv::UMat for argument 'src'
fort cv2 contig Error: Expected cv::UMat for argument 'src'
cv2_ Error: Expected cv::UMat for argument 'src'
cv2_ contig Error: Expected cv::UMat for argument 'src'
fort cv2_ Error: Expected cv::UMat for argument 'src'
fort cv2_ contig Error: Expected cv::UMat for argument 'src'
cv2_ get Error: Expected cv::UMat for argument 'src'
cv2_ get contig Error: Expected cv::UMat for argument 'src'
fort cv2_ get Error: Expected cv::UMat for argument 'src'
fort cv2_ get contig Error: Expected cv::UMat for argument 'src'
----------
uint8
----------
slice 0.00052ms
slice, contig 0.21878ms
fliplr 0.00174ms
fliplr contig 0.21828ms
cv2 0.07037ms (3.11x)
cv2 contig 0.07355ms (2.97x)
fort cv2 0.33900ms (0.65x)
fort cv2 contig 0.34198ms (0.64x)
cv2_ 0.08093ms (2.70x)
cv2_ contig 0.08554ms (2.56x)
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: 'numpy.ndarray' object has no attribute 'get'
cv2_ get contig Error: 'numpy.ndarray' object has no attribute 'get'
fort cv2_ get 1.25783ms (0.17x)
fort cv2_ get contig 1.25868ms (0.17x)
----------
uint16
----------
slice 0.00176ms
slice, contig 0.21250ms
fliplr 0.00489ms
fliplr contig 0.21438ms
cv2 0.16964ms (1.25x)
cv2 contig 0.17314ms (1.23x)
fort cv2 0.50989ms (0.42x)
fort cv2 contig 0.51188ms (0.42x)
cv2_ 0.18803ms (1.13x)
cv2_ contig 0.19136ms (1.11x)
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: 'numpy.ndarray' object has no attribute 'get'
cv2_ get contig Error: 'numpy.ndarray' object has no attribute 'get'
fort cv2_ get 1.48429ms (0.14x)
fort cv2_ get contig 1.48392ms (0.14x)
----------
uint32
----------
slice 0.00181ms
slice, contig 0.22855ms
fliplr 0.00486ms
fliplr contig 0.23070ms
cv2 Error: Expected cv::UMat for argument 'src'
cv2 contig Error: Expected cv::UMat for argument 'src'
fort cv2 Error: Expected cv::UMat for argument 'src'
fort cv2 contig Error: Expected cv::UMat for argument 'src'
cv2_ Error: Expected cv::UMat for argument 'src'
cv2_ contig Error: Expected cv::UMat for argument 'src'
fort cv2_ Error: Expected cv::UMat for argument 'src'
fort cv2_ contig Error: Expected cv::UMat for argument 'src'
cv2_ get Error: Expected cv::UMat for argument 'src'
cv2_ get contig Error: Expected cv::UMat for argument 'src'
fort cv2_ get Error: Expected cv::UMat for argument 'src'
fort cv2_ get contig Error: Expected cv::UMat for argument 'src'
----------
uint64
----------
slice 0.00175ms
slice, contig 0.28662ms
fliplr 0.00497ms
fliplr contig 0.28986ms
cv2 Error: Got dtype int32
cv2 contig Error: Got dtype int32
fort cv2 Error: Got dtype int32
fort cv2 contig Error: Got dtype int32
cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
cv2_ contig Error: Got dtype object
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: Got dtype int32
cv2_ get contig Error: Got dtype int32
fort cv2_ get Error: Got dtype int32
fort cv2_ get contig Error: Got dtype int32
----------
int8
----------
slice 0.00052ms
slice, contig 0.21802ms
fliplr 0.00183ms
fliplr contig 0.21866ms
cv2 0.07026ms (3.10x)
cv2 contig 0.07234ms (3.01x)
fort cv2 0.34137ms (0.64x)
fort cv2 contig 0.35426ms (0.62x)
cv2_ 0.08145ms (2.68x)
cv2_ contig 0.08498ms (2.57x)
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: 'numpy.ndarray' object has no attribute 'get'
cv2_ get contig Error: 'numpy.ndarray' object has no attribute 'get'
fort cv2_ get 1.27798ms (0.17x)
fort cv2_ get contig 1.26791ms (0.17x)
----------
int16
----------
slice 0.00146ms
slice, contig 0.21083ms
fliplr 0.00443ms
fliplr contig 0.21287ms
cv2 0.17461ms (1.21x)
cv2 contig 0.17523ms (1.20x)
fort cv2 0.51030ms (0.41x)
fort cv2 contig 0.50438ms (0.42x)
cv2_ 0.18627ms (1.13x)
cv2_ contig 0.19703ms (1.07x)
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: 'numpy.ndarray' object has no attribute 'get'
cv2_ get contig Error: 'numpy.ndarray' object has no attribute 'get'
fort cv2_ get 1.47157ms (0.14x)
fort cv2_ get contig 1.48715ms (0.14x)
----------
int32
----------
slice 0.00177ms
slice, contig 0.22641ms
fliplr 0.00505ms
fliplr contig 0.22934ms
cv2 0.33548ms (0.67x)
cv2 contig 0.34303ms (0.66x)
fort cv2 0.77874ms (0.29x)
fort cv2 contig 0.78380ms (0.29x)
cv2_ 0.39785ms (0.57x)
cv2_ contig 0.39249ms (0.58x)
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: 'numpy.ndarray' object has no attribute 'get'
cv2_ get contig Error: 'numpy.ndarray' object has no attribute 'get'
fort cv2_ get 1.89115ms (0.12x)
fort cv2_ get contig 1.89214ms (0.12x)
----------
int64
----------
slice 0.00176ms
slice, contig 0.28347ms
fliplr 0.00484ms
fliplr contig 0.28658ms
cv2 Error: Got dtype int32
cv2 contig Error: Got dtype int32
fort cv2 Error: Got dtype int32
fort cv2 contig Error: Got dtype int32
cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
cv2_ contig Error: Got dtype object
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: Got dtype int32
cv2_ get contig Error: Got dtype int32
fort cv2_ get Error: Got dtype int32
fort cv2_ get contig Error: Got dtype int32
----------
float16
----------
slice 0.00155ms
slice, contig 0.21066ms
fliplr 0.00435ms
fliplr contig 0.21295ms
cv2 Error: Expected cv::UMat for argument 'src'
cv2 contig Error: Expected cv::UMat for argument 'src'
fort cv2 Error: Expected cv::UMat for argument 'src'
fort cv2 contig Error: Expected cv::UMat for argument 'src'
cv2_ Error: Expected cv::UMat for argument 'src'
cv2_ contig Error: Expected cv::UMat for argument 'src'
fort cv2_ Error: Expected cv::UMat for argument 'src'
fort cv2_ contig Error: Expected cv::UMat for argument 'src'
cv2_ get Error: Expected cv::UMat for argument 'src'
cv2_ get contig Error: Expected cv::UMat for argument 'src'
fort cv2_ get Error: Expected cv::UMat for argument 'src'
fort cv2_ get contig Error: Expected cv::UMat for argument 'src'
----------
float32
----------
slice 0.00177ms
slice, contig 0.22798ms
fliplr 0.00495ms
fliplr contig 0.22916ms
cv2 0.33821ms (0.67x)
cv2 contig 0.31665ms (0.72x)
fort cv2 0.78119ms (0.29x)
fort cv2 contig 0.77838ms (0.29x)
cv2_ 0.39515ms (0.58x)
cv2_ contig 0.41023ms (0.56x)
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: 'numpy.ndarray' object has no attribute 'get'
cv2_ get contig Error: 'numpy.ndarray' object has no attribute 'get'
fort cv2_ get 1.88737ms (0.12x)
fort cv2_ get contig 1.89616ms (0.12x)
----------
float64
----------
slice 0.00179ms
slice, contig 0.28810ms
fliplr 0.00495ms
fliplr contig 0.29130ms
cv2 0.63258ms (0.46x)
cv2 contig 0.64089ms (0.45x)
fort cv2 1.64795ms (0.17x)
fort cv2 contig 1.65449ms (0.17x)
cv2_ 0.75202ms (0.38x)
cv2_ contig 0.74789ms (0.39x)
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: 'numpy.ndarray' object has no attribute 'get'
cv2_ get contig Error: 'numpy.ndarray' object has no attribute 'get'
fort cv2_ get 3.99237ms (0.07x)
fort cv2_ get contig 3.97847ms (0.07x)
----------
float128
----------
slice 0.00179ms
slice, contig 0.51371ms
fliplr 0.00545ms
fliplr contig 0.51618ms
cv2 Error: Expected cv::UMat for argument 'src'
cv2 contig Error: Expected cv::UMat for argument 'src'
fort cv2 Error: Expected cv::UMat for argument 'src'
fort cv2 contig Error: Expected cv::UMat for argument 'src'
cv2_ Error: Expected cv::UMat for argument 'src'
cv2_ contig Error: Expected cv::UMat for argument 'src'
fort cv2_ Error: Expected cv::UMat for argument 'src'
fort cv2_ contig Error: Expected cv::UMat for argument 'src'
cv2_ get Error: Expected cv::UMat for argument 'src'
cv2_ get contig Error: Expected cv::UMat for argument 'src'
fort cv2_ get Error: Expected cv::UMat for argument 'src'
fort cv2_ get contig Error: Expected cv::UMat for argument 'src'
==============================
flip method followed by Add
==============================
slice 1.29597ms
slice, contig 1.32523ms
fliplr 1.29298ms
fliplr contig 1.33087ms
cv2 1.17829ms
cv2 contig 1.18350ms
fort cv2 1.45182ms
fort cv2 contig 1.45762ms
cv2_ 1.19331ms
cv2_ contig 1.19364ms
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: 'numpy.ndarray' object has no attribute 'get'
cv2_ get contig Error: 'numpy.ndarray' object has no attribute 'get'
fort cv2_ get 2.43293ms
fort cv2_ get contig 2.48836ms
==============================
flip method followed by Affine
==============================
slice 2.83081ms
slice, contig 2.88243ms
fliplr 2.84253ms
fliplr contig 2.89106ms
cv2 2.72900ms
cv2 contig 2.74500ms
fort cv2 2.99842ms
fort cv2 contig 3.03457ms
cv2_ 2.73629ms
cv2_ contig 2.77505ms
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: 'numpy.ndarray' object has no attribute 'get'
cv2_ get contig Error: 'numpy.ndarray' object has no attribute 'get'
fort cv2_ get 4.01583ms
fort cv2_ get contig 4.03347ms
==============================
flip method followed by AverageBlur
==============================
slice 0.77109ms
slice, contig 0.80603ms
fliplr 0.77666ms
fliplr contig 0.81088ms
cv2 0.66065ms
cv2 contig 0.66496ms
fort cv2 0.94078ms
fort cv2 contig 0.92662ms
cv2_ 0.65560ms
cv2_ contig 0.66237ms
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: 'numpy.ndarray' object has no attribute 'get'
cv2_ get contig Error: 'numpy.ndarray' object has no attribute 'get'
fort cv2_ get 1.88932ms
fort cv2_ get contig 1.89190ms
"""
"""
Speed comparison by datatype and flip method.
VERTICAL FLIPS.
----------
bool
----------
slice 0.00047ms
slice, contig 0.02332ms
flipud 0.00143ms
flipud contig 0.02502ms
cv2 Error: Expected cv::UMat for argument 'src'
cv2 contig Error: Expected cv::UMat for argument 'src'
fort cv2 Error: Expected cv::UMat for argument 'src'
fort cv2 contig Error: Expected cv::UMat for argument 'src'
cv2_ Error: Expected cv::UMat for argument 'src'
cv2_ contig Error: Expected cv::UMat for argument 'src'
fort cv2_ Error: Expected cv::UMat for argument 'src'
fort cv2_ contig Error: Expected cv::UMat for argument 'src'
cv2_ get Error: Expected cv::UMat for argument 'src'
cv2_ get contig Error: Expected cv::UMat for argument 'src'
fort cv2_ get Error: Expected cv::UMat for argument 'src'
fort cv2_ get contig Error: Expected cv::UMat for argument 'src'
----------
uint8
----------
slice 0.00049ms
slice, contig 0.02311ms
flipud 0.00155ms
flipud contig 0.02506ms
cv2 0.03030ms (0.76x)
cv2 contig 0.03401ms (0.68x)
fort cv2 0.31000ms (0.07x)
fort cv2 contig 0.33619ms (0.07x)
cv2_ 0.01753ms (1.32x)
cv2_ contig 0.01841ms (1.26x)
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: 'numpy.ndarray' object has no attribute 'get'
cv2_ get contig Error: 'numpy.ndarray' object has no attribute 'get'
fort cv2_ get 1.26680ms (0.02x)
fort cv2_ get contig 1.27027ms (0.02x)
----------
uint16
----------
slice 0.00147ms
slice, contig 0.04861ms
flipud 0.00406ms
flipud contig 0.05060ms
cv2 0.06169ms (0.79x)
cv2 contig 0.06397ms (0.76x)
fort cv2 0.39190ms (0.12x)
fort cv2 contig 0.39098ms (0.12x)
cv2_ 0.03375ms (1.44x)
cv2_ contig 0.03619ms (1.34x)
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: 'numpy.ndarray' object has no attribute 'get'
cv2_ get contig Error: 'numpy.ndarray' object has no attribute 'get'
fort cv2_ get 1.51197ms (0.03x)
fort cv2_ get contig 1.52977ms (0.03x)
----------
uint32
----------
slice 0.00167ms
slice, contig 0.09415ms
flipud 0.00476ms
flipud contig 0.09660ms
cv2 Error: Expected cv::UMat for argument 'src'
cv2 contig Error: Expected cv::UMat for argument 'src'
fort cv2 Error: Expected cv::UMat for argument 'src'
fort cv2 contig Error: Expected cv::UMat for argument 'src'
cv2_ Error: Expected cv::UMat for argument 'src'
cv2_ contig Error: Expected cv::UMat for argument 'src'
fort cv2_ Error: Expected cv::UMat for argument 'src'
fort cv2_ contig Error: Expected cv::UMat for argument 'src'
cv2_ get Error: Expected cv::UMat for argument 'src'
cv2_ get contig Error: Expected cv::UMat for argument 'src'
fort cv2_ get Error: Expected cv::UMat for argument 'src'
fort cv2_ get contig Error: Expected cv::UMat for argument 'src'
----------
uint64
----------
slice 0.00175ms
slice, contig 0.17413ms
flipud 0.00488ms
flipud contig 0.17508ms
cv2 Error: Got dtype int32
cv2 contig Error: Got dtype int32
fort cv2 Error: Got dtype int32
fort cv2 contig Error: Got dtype int32
cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
cv2_ contig Error: Got dtype object
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: Got dtype int32
cv2_ get contig Error: Got dtype int32
fort cv2_ get Error: Got dtype int32
fort cv2_ get contig Error: Got dtype int32
----------
int8
----------
slice 0.00057ms
slice, contig 0.02604ms
flipud 0.00146ms
flipud contig 0.02806ms
cv2 0.03434ms (0.76x)
cv2 contig 0.03676ms (0.71x)
fort cv2 0.30920ms (0.08x)
fort cv2 contig 0.31123ms (0.08x)
cv2_ 0.01625ms (1.60x)
cv2_ contig 0.01799ms (1.45x)
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: 'numpy.ndarray' object has no attribute 'get'
cv2_ get contig Error: 'numpy.ndarray' object has no attribute 'get'
fort cv2_ get 1.29065ms (0.02x)
fort cv2_ get contig 1.29596ms (0.02x)
----------
int16
----------
slice 0.00142ms
slice, contig 0.05079ms
flipud 0.00403ms
flipud contig 0.05312ms
cv2 0.06277ms (0.81x)
cv2 contig 0.06527ms (0.78x)
fort cv2 0.39710ms (0.13x)
fort cv2 contig 0.39851ms (0.13x)
cv2_ 0.03419ms (1.49x)
cv2_ contig 0.03668ms (1.38x)
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: 'numpy.ndarray' object has no attribute 'get'
cv2_ get contig Error: 'numpy.ndarray' object has no attribute 'get'
fort cv2_ get 1.52476ms (0.03x)
fort cv2_ get contig 1.52594ms (0.03x)
----------
int32
----------
slice 0.00172ms
slice, contig 0.09621ms
flipud 0.00469ms
flipud contig 0.09868ms
cv2 0.12192ms (0.79x)
cv2 contig 0.12459ms (0.77x)
fort cv2 0.57915ms (0.17x)
fort cv2 contig 0.58571ms (0.16x)
cv2_ 0.07337ms (1.31x)
cv2_ contig 0.07595ms (1.27x)
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: 'numpy.ndarray' object has no attribute 'get'
cv2_ get contig Error: 'numpy.ndarray' object has no attribute 'get'
fort cv2_ get 1.97937ms (0.05x)
fort cv2_ get contig 1.97919ms (0.05x)
----------
int64
----------
slice 0.00167ms
slice, contig 0.17308ms
flipud 0.00470ms
flipud contig 0.17542ms
cv2 Error: Got dtype int32
cv2 contig Error: Got dtype int32
fort cv2 Error: Got dtype int32
fort cv2 contig Error: Got dtype int32
cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
cv2_ contig Error: Got dtype object
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: Got dtype int32
cv2_ get contig Error: Got dtype int32
fort cv2_ get Error: Got dtype int32
fort cv2_ get contig Error: Got dtype int32
----------
float16
----------
slice 0.00146ms
slice, contig 0.05094ms
flipud 0.00408ms
flipud contig 0.05359ms
cv2 Error: Expected cv::UMat for argument 'src'
cv2 contig Error: Expected cv::UMat for argument 'src'
fort cv2 Error: Expected cv::UMat for argument 'src'
fort cv2 contig Error: Expected cv::UMat for argument 'src'
cv2_ Error: Expected cv::UMat for argument 'src'
cv2_ contig Error: Expected cv::UMat for argument 'src'
fort cv2_ Error: Expected cv::UMat for argument 'src'
fort cv2_ contig Error: Expected cv::UMat for argument 'src'
cv2_ get Error: Expected cv::UMat for argument 'src'
cv2_ get contig Error: Expected cv::UMat for argument 'src'
fort cv2_ get Error: Expected cv::UMat for argument 'src'
fort cv2_ get contig Error: Expected cv::UMat for argument 'src'
----------
float32
----------
slice 0.00164ms
slice, contig 0.09606ms
flipud 0.00461ms
flipud contig 0.09897ms
cv2 0.12151ms (0.79x)
cv2 contig 0.12514ms (0.77x)
fort cv2 0.57887ms (0.17x)
fort cv2 contig 0.58280ms (0.16x)
cv2_ 0.07312ms (1.31x)
cv2_ contig 0.07581ms (1.27x)
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: 'numpy.ndarray' object has no attribute 'get'
cv2_ get contig Error: 'numpy.ndarray' object has no attribute 'get'
fort cv2_ get 1.97501ms (0.05x)
fort cv2_ get contig 1.98010ms (0.05x)
----------
float64
----------
slice 0.00170ms
slice, contig 0.17300ms
flipud 0.00483ms
flipud contig 0.17539ms
cv2 0.23941ms (0.72x)
cv2 contig 0.24220ms (0.71x)
fort cv2 1.26645ms (0.14x)
fort cv2 contig 1.27246ms (0.14x)
cv2_ 0.14879ms (1.16x)
cv2_ contig 0.15185ms (1.14x)
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: 'numpy.ndarray' object has no attribute 'get'
cv2_ get contig Error: 'numpy.ndarray' object has no attribute 'get'
fort cv2_ get 4.02958ms (0.04x)
fort cv2_ get contig 4.02822ms (0.04x)
----------
float128
----------
slice 0.00168ms
slice, contig 0.35407ms
flipud 0.00513ms
flipud contig 0.35716ms
cv2 Error: Expected cv::UMat for argument 'src'
cv2 contig Error: Expected cv::UMat for argument 'src'
fort cv2 Error: Expected cv::UMat for argument 'src'
fort cv2 contig Error: Expected cv::UMat for argument 'src'
cv2_ Error: Expected cv::UMat for argument 'src'
cv2_ contig Error: Expected cv::UMat for argument 'src'
fort cv2_ Error: Expected cv::UMat for argument 'src'
fort cv2_ contig Error: Expected cv::UMat for argument 'src'
cv2_ get Error: Expected cv::UMat for argument 'src'
cv2_ get contig Error: Expected cv::UMat for argument 'src'
fort cv2_ get Error: Expected cv::UMat for argument 'src'
fort cv2_ get contig Error: Expected cv::UMat for argument 'src'
==============================
flip method followed by Add
==============================
slice 1.11286ms
slice, contig 1.14822ms
flipud 1.11858ms
flipud contig 1.14703ms
cv2 1.14892ms
cv2 contig 1.15923ms
fort cv2 1.43633ms
fort cv2 contig 1.44342ms
cv2_ 1.15194ms
cv2_ contig 1.14864ms
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: 'numpy.ndarray' object has no attribute 'get'
cv2_ get contig Error: 'numpy.ndarray' object has no attribute 'get'
fort cv2_ get 2.47966ms
fort cv2_ get contig 2.48177ms
==============================
flip method followed by Affine
==============================
slice 2.61450ms
slice, contig 2.67402ms
flipud 2.62069ms
flipud contig 2.67267ms
cv2 2.66312ms
cv2 contig 2.68482ms
fort cv2 2.94520ms
fort cv2 contig 2.97767ms
cv2_ 2.64183ms
cv2_ contig 2.64857ms
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: 'numpy.ndarray' object has no attribute 'get'
cv2_ get contig Error: 'numpy.ndarray' object has no attribute 'get'
fort cv2_ get 3.94321ms
fort cv2_ get contig 4.01652ms
==============================
flip method followed by AverageBlur
==============================
slice 0.57750ms
slice, contig 0.60905ms
flipud 0.58156ms
flipud contig 0.61562ms
cv2 0.61704ms
cv2 contig 0.62293ms
fort cv2 0.90804ms
fort cv2 contig 0.90495ms
cv2_ 0.60047ms
cv2_ contig 0.60876ms
fort cv2_ Error: 'cv2.UMat' object has no attribute 'ndim'
fort cv2_ contig Error: Got dtype object
cv2_ get Error: 'numpy.ndarray' object has no attribute 'get'
cv2_ get contig Error: 'numpy.ndarray' object has no attribute 'get'
fort cv2_ get 1.93064ms
fort cv2_ get contig 1.95215ms
"""
# pylint:enable=pointless-string-statement
_FLIPLR_DTYPES_CV2 = {"uint8", "uint16", "int8", "int16"}
[docs]def fliplr(arr):
"""Flip an image-like array horizontally.
**Supported dtypes**:
* ``uint8``: yes; fully tested
* ``uint16``: yes; fully tested
* ``uint32``: yes; fully tested
* ``uint64``: yes; fully tested
* ``int8``: yes; fully tested
* ``int16``: yes; fully tested
* ``int32``: yes; fully tested
* ``int64``: yes; fully tested
* ``float16``: yes; fully tested
* ``float32``: yes; fully tested
* ``float64``: yes; fully tested
* ``float128``: yes; fully tested
* ``bool``: yes; fully tested
Parameters
----------
arr : ndarray
A 2D/3D `(H, W, [C])` image array.
Returns
-------
ndarray
Horizontally flipped array.
Examples
--------
>>> import numpy as np
>>> import imgaug.augmenters.flip as flip
>>> arr = np.arange(16).reshape((4, 4))
>>> arr_flipped = flip.fliplr(arr)
Create a ``4x4`` array and flip it horizontally.
"""
# we don't check here if #channels > 512, because the cv2 function also
# kinda works with that, it is very rare to happen and would induce an
# additional check (with significant relative impact on runtime considering
# flipping is already ultra fast)
if arr.dtype.name in _FLIPLR_DTYPES_CV2:
return _fliplr_cv2(arr)
return _fliplr_sliced(arr)
def _fliplr_sliced(arr):
return arr[:, ::-1, ...]
def _fliplr_cv2(arr):
# cv2.flip() returns None for arrays with zero height or width
# and turns channels=0 to channels=512
if arr.size == 0:
return np.copy(arr)
# cv2.flip() fails for more than 512 channels
if arr.ndim == 3 and arr.shape[-1] > 512:
# TODO this is quite inefficient right now
channels = [
cv2.flip(_normalize_cv2_input_arr_(arr[..., c]), 1)
for c
in sm.xrange(arr.shape[-1])
]
result = np.stack(channels, axis=-1)
else:
# Normalization from imgaug.imgaug._normalize_cv2_input_arr_().
# Moved here for performance reasons. Keep this aligned.
# TODO recalculate timings, they were computed without this.
flags = arr.flags
if not flags["OWNDATA"]:
arr = np.copy(arr)
flags = arr.flags
if not flags["C_CONTIGUOUS"]:
arr = np.ascontiguousarray(arr)
result = cv2.flip(_normalize_cv2_input_arr_(arr), 1)
if result.ndim == 2 and arr.ndim == 3:
return result[..., np.newaxis]
return result
[docs]def flipud(arr):
"""Flip an image-like array vertically.
**Supported dtypes**:
* ``uint8``: yes; fully tested
* ``uint16``: yes; fully tested
* ``uint32``: yes; fully tested
* ``uint64``: yes; fully tested
* ``int8``: yes; fully tested
* ``int16``: yes; fully tested
* ``int32``: yes; fully tested
* ``int64``: yes; fully tested
* ``float16``: yes; fully tested
* ``float32``: yes; fully tested
* ``float64``: yes; fully tested
* ``float128``: yes; fully tested
* ``bool``: yes; fully tested
Parameters
----------
arr : ndarray
A 2D/3D `(H, W, [C])` image array.
Returns
-------
ndarray
Vertically flipped array.
Examples
--------
>>> import numpy as np
>>> import imgaug.augmenters.flip as flip
>>> arr = np.arange(16).reshape((4, 4))
>>> arr_flipped = flip.flipud(arr)
Create a ``4x4`` array and flip it vertically.
"""
# Note that this function is currently not called by Flipud for performance
# reasons. Changing this will therefore not affect Flipud.
return arr[::-1, ...]
[docs]def HorizontalFlip(*args, **kwargs):
"""Alias for Fliplr."""
# pylint: disable=invalid-name
return Fliplr(*args, **kwargs)
[docs]def VerticalFlip(*args, **kwargs):
"""Alias for Flipud."""
# pylint: disable=invalid-name
return Flipud(*args, **kwargs)
[docs]class Fliplr(meta.Augmenter):
"""Flip/mirror input images horizontally.
.. note::
The default value for the probability is ``0.0``.
So, to flip *all* input images use ``Fliplr(1.0)`` and *not* just
``Fliplr()``.
**Supported dtypes**:
See :func:`~imgaug.augmenters.flip.fliplr`.
Parameters
----------
p : number or imgaug.parameters.StochasticParameter, optional
Probability of each image to get flipped.
seed : None or int or imgaug.random.RNG or numpy.random.Generator or numpy.random.BitGenerator or numpy.random.SeedSequence or numpy.random.RandomState, optional
See :func:`~imgaug.augmenters.meta.Augmenter.__init__`.
name : None or str, optional
See :func:`~imgaug.augmenters.meta.Augmenter.__init__`.
random_state : None or int or imgaug.random.RNG or numpy.random.Generator or numpy.random.BitGenerator or numpy.random.SeedSequence or numpy.random.RandomState, optional
Old name for parameter `seed`.
Its usage will not yet cause a deprecation warning,
but it is still recommended to use `seed` now.
Outdated since 0.4.0.
deterministic : bool, optional
Deprecated since 0.4.0.
See method ``to_deterministic()`` for an alternative and for
details about what the "deterministic mode" actually does.
Examples
--------
>>> import imgaug.augmenters as iaa
>>> aug = iaa.Fliplr(0.5)
Flip ``50`` percent of all images horizontally.
>>> aug = iaa.Fliplr(1.0)
Flip all images horizontally.
"""
def __init__(self, p=1,
seed=None, name=None,
random_state="deprecated", deterministic="deprecated"):
super(Fliplr, self).__init__(
seed=seed, name=name,
random_state=random_state, deterministic=deterministic)
self.p = iap.handle_probability_param(p, "p")
# Added in 0.4.0.
def _augment_batch_(self, batch, random_state, parents, hooks):
samples = self.p.draw_samples((batch.nb_rows,),
random_state=random_state)
for i, sample in enumerate(samples):
if sample >= 0.5:
if batch.images is not None:
batch.images[i] = fliplr(batch.images[i])
if batch.heatmaps is not None:
batch.heatmaps[i].arr_0to1 = fliplr(
batch.heatmaps[i].arr_0to1)
if batch.segmentation_maps is not None:
batch.segmentation_maps[i].arr = fliplr(
batch.segmentation_maps[i].arr)
if batch.keypoints is not None:
kpsoi = batch.keypoints[i]
width = kpsoi.shape[1]
for kp in kpsoi.keypoints:
kp.x = width - float(kp.x)
if batch.bounding_boxes is not None:
bbsoi = batch.bounding_boxes[i]
width = bbsoi.shape[1]
for bb in bbsoi.bounding_boxes:
# after flip, x1 ends up right of x2
x1, x2 = bb.x1, bb.x2
bb.x1 = width - x2
bb.x2 = width - x1
if batch.polygons is not None:
psoi = batch.polygons[i]
width = psoi.shape[1]
for poly in psoi.polygons:
# TODO maybe reverse the order of points afterwards?
# the flip probably inverts them
poly.exterior[:, 0] = width - poly.exterior[:, 0]
if batch.line_strings is not None:
lsoi = batch.line_strings[i]
width = lsoi.shape[1]
for ls in lsoi.line_strings:
# TODO maybe reverse the order of points afterwards?
# the flip probably inverts them
ls.coords[:, 0] = width - ls.coords[:, 0]
return batch
[docs] def get_parameters(self):
"""See :func:`~imgaug.augmenters.meta.Augmenter.get_parameters`."""
return [self.p]
# TODO merge with Fliplr
[docs]class Flipud(meta.Augmenter):
"""Flip/mirror input images vertically.
.. note::
The default value for the probability is ``0.0``.
So, to flip *all* input images use ``Flipud(1.0)`` and *not* just
``Flipud()``.
**Supported dtypes**:
See :func:`~imgaug.augmenters.flip.flipud`.
Parameters
----------
p : number or imgaug.parameters.StochasticParameter, optional
Probability of each image to get flipped.
seed : None or int or imgaug.random.RNG or numpy.random.Generator or numpy.random.BitGenerator or numpy.random.SeedSequence or numpy.random.RandomState, optional
See :func:`~imgaug.augmenters.meta.Augmenter.__init__`.
name : None or str, optional
See :func:`~imgaug.augmenters.meta.Augmenter.__init__`.
random_state : None or int or imgaug.random.RNG or numpy.random.Generator or numpy.random.BitGenerator or numpy.random.SeedSequence or numpy.random.RandomState, optional
Old name for parameter `seed`.
Its usage will not yet cause a deprecation warning,
but it is still recommended to use `seed` now.
Outdated since 0.4.0.
deterministic : bool, optional
Deprecated since 0.4.0.
See method ``to_deterministic()`` for an alternative and for
details about what the "deterministic mode" actually does.
Examples
--------
>>> import imgaug.augmenters as iaa
>>> aug = iaa.Flipud(0.5)
Flip ``50`` percent of all images vertically.
>>> aug = iaa.Flipud(1.0)
Flip all images vertically.
"""
def __init__(self, p=1,
seed=None, name=None,
random_state="deprecated", deterministic="deprecated"):
super(Flipud, self).__init__(
seed=seed, name=name,
random_state=random_state, deterministic=deterministic)
self.p = iap.handle_probability_param(p, "p")
# Added in 0.4.0.
def _augment_batch_(self, batch, random_state, parents, hooks):
samples = self.p.draw_samples((batch.nb_rows,),
random_state=random_state)
for i, sample in enumerate(samples):
if sample >= 0.5:
if batch.images is not None:
# We currently do not use flip.flipud() here, because that
# saves a function call.
batch.images[i] = batch.images[i][::-1, ...]
if batch.heatmaps is not None:
batch.heatmaps[i].arr_0to1 = \
batch.heatmaps[i].arr_0to1[::-1, ...]
if batch.segmentation_maps is not None:
batch.segmentation_maps[i].arr = \
batch.segmentation_maps[i].arr[::-1, ...]
if batch.keypoints is not None:
kpsoi = batch.keypoints[i]
height = kpsoi.shape[0]
for kp in kpsoi.keypoints:
kp.y = height - float(kp.y)
if batch.bounding_boxes is not None:
bbsoi = batch.bounding_boxes[i]
height = bbsoi.shape[0]
for bb in bbsoi.bounding_boxes:
# after flip, y1 ends up right of y2
y1, y2 = bb.y1, bb.y2
bb.y1 = height - y2
bb.y2 = height - y1
if batch.polygons is not None:
psoi = batch.polygons[i]
height = psoi.shape[0]
for poly in psoi.polygons:
# TODO maybe reverse the order of points afterwards?
# the flip probably inverts them
poly.exterior[:, 1] = height - poly.exterior[:, 1]
if batch.line_strings is not None:
lsoi = batch.line_strings[i]
height = lsoi.shape[0]
for ls in lsoi.line_strings:
# TODO maybe reverse the order of points afterwards?
# the flip probably inverts them
ls.coords[:, 1] = height - ls.coords[:, 1]
return batch
[docs] def get_parameters(self):
"""See :func:`~imgaug.augmenters.meta.Augmenter.get_parameters`."""
return [self.p]