Environment (fill in your exact versions):
- Platform: macOS-15.6.1 (arm64)
- Python 3.14.2
- OpenCV: 4.11.0
- NumPy: 2.2.6
Bug Description:
- cv2.imread() with 16-bit TIFF files creates float32 arrays that cause np.maximum() and np.minimum() to behave inconsistently. When these numpy functions are called inside another function, they return incorrect values, but when called directly on the same arrays, they work correctly.
Key Symptoms:
- Context-dependent failure: np.maximum() works when called directly, fails when called inside functions
- Incorrect HLS conversion: Causes hue channel (H) to be 0 instead of ≈46.6
- Array properties: Non-C-contiguous (strides: (24000, 12) for 1300×2000 image)
- Specific to: Photoshop-created 16-bit TIFFs (random syntetic TIFFs generated by CV2 don't trigger bug)
Impact:
- Any image processing using np.maximum()/np.minimum() on OpenCV-loaded float32 arrays in functions produces wrong results.
Workaround:
- Use Python's max()/min() instead of np.maximum()/np.minimum(). But it is extremely slower for large images.
The bug does not show up with python 3.12.
In attachment a sample image and the script that allows to reproduce the bug.
test_cv2_issue.py
0000.tif