v0.19.0
Release Highlights
CV-CUDA v0.19.0-beta includes the following changes.
New Features and Enhancements
-
Added
cvcuda.tv, a torchvision-compatible functional API for geometry, color, photometric and tensor transforms, without runtime dependencies on PyTorch or torchvision. Functions accepttorch.Tensorandcvcuda.Tensorinputs, includingerase's fill value andelastic's displacement. As in torchvision, displacement is relative to the identity sampling grid.cvcuda.tv.Compose(which requires PyTorch and TorchVision) runs TorchVision v2 transform pipelines, including random and AutoAugment-family transforms, as one CV-CUDA chain with a single import and export; see the supported-transform table. -
Added
TvResizewith nearest-exact, nearest-floor, linear and cubic sampling, optional antialiasing, and torchvision-style Python size/max-size handling. Supports U8/U16/S16/F16/F32 HWC/NHWC and CHW/NCHW tensors, and uniform single-plane C1/3/4 variable-shape batches. Input and output scalar types must match; integer results round ties-to-even and saturate. The C/C++ API requires caller-owned workspace. -
Added
SplitandMergefor tensors and variable-shape image batches. -
Added free-threaded CPython 3.14 support, including concurrent operator submission, shared-buffer dependency tracking and safe batch mutation. See Free-threaded Python for build instructions and concurrency semantics.
-
Expanded data-type support:
CopyMakeBorder: S8/S32/S64/F64 on tensor, var-shape and planar paths.CustomCrop: all uniformly packed 8-, 16-, 32- and 64-bit signed, unsigned and floating-point channel types.Invert: S16/S32/S64/F64;Solarize: F64;AutoContrast: S16;BrightnessContrast: S64/F64.Normalize: F64 on tensor, var-shape, scalar and planar paths, using double-precision arithmetic for images. Parameters remain F32.Posterize: F16/F32/F64 images, quantizing normalized[0, 1]values into2 ** bitslevels withbitsin[0, 8].
-
Extended
HistogramEqwith F16/F32/F64 images and a Pillow-compatible lookup-table method. Floating-point images are binned to 8 bits, equalized and scaled back. Select the method withNVCVHistogramEqMethodor Python'smethod=keyword:NVCV_HISTOGRAM_EQ_PILLOWmatches Pillow's table bit-exactly; the defaultNVCV_HISTOGRAM_EQ_OPENCVand existing entry points are unchanged. -
Added
CvtColorgrayscale codesRGB2GRAY_TVandBGR2GRAY_TV, bit-exact withtorchvision.transforms.v2.functional.rgb_to_grayscale. They use BT.601 weights0.2989 / 0.587 / 0.114(as in MATLABrgb2grayand TensorFlow), evaluated in float32 and truncated for integer outputs. UnlikeRGB2GRAY(0.299, rounded to nearest), the weights sum to0.9999, so white maps to 254 for U8.RGBA2GRAY_TVandBGRA2GRAY_TVignore alpha. -
Added
AdvCvtColorsupport for the existing full-range BT.601, BT.709 and BT.2020NVCV_COLOR_SPEC_*_ERspecifications, also exposed through Python'scvcuda.ColorSpec. Each uses the same full-range U8 arithmetic as its base variant (issue #289). -
Expanded interpolation and border options:
ResizeacceptsNVCV_INTERP_NEAREST_FLOOR(Pythoncvcuda.Interp.NEAREST_FLOOR) for PyTorch/torchvisionnearestalignment. The existingNVCV_INTERP_NEARESTcenter-based convention is unchanged.WarpAffine,WarpPerspectiveandRemaptensor paths acceptNVCV_BORDER_CONSTANT_COVERAGE. It blends the border value according to the interpolation footprint's out-of-bounds coverage, at full precision before rounding. Var-shape paths do n