# cv::error: (-215:Assertion failed) src.type() == CV_32FC2 || src.type() == CV_64FC2 in function 'cv::fisheye::undistortPoints'

- **ID:** `opencv/calib3d-fisheye-undistort-points-dtype`
- **Domain:** opencv
- **Category:** type_error
- **Error Code:** `-215`
- **Verification:** ai_generated
- **Fix Rate:** 90%

## Root Cause

fisheye::undistortPoints requires input points as a 2-channel float or double array, but the input has wrong type or channel count.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| 4.5.5 | active | — | — |
| 4.8.0 | active | — | — |
| 4.9.0 | active | — | — |

## Workarounds

1. **pts = np.array([[x1, y1], [x2, y2]], dtype=np.float32)
undistorted = cv2.fisheye.undistortPoints(pts, K, D)** (95% success)
   ```
   pts = np.array([[x1, y1], [x2, y2]], dtype=np.float32)
undistorted = cv2.fisheye.undistortPoints(pts, K, D)
   ```
2. **pts = np.array([[[x1, y1]], [[x2, y2]]], dtype=np.float64)
undistorted = cv2.fisheye.undistortPoints(pts, K, D, P=K)** (90% success)
   ```
   pts = np.array([[[x1, y1]], [[x2, y2]]], dtype=np.float64)
undistorted = cv2.fisheye.undistortPoints(pts, K, D, P=K)
   ```

## Dead Ends

- **** — Single-channel float (CV_32F) is not a 2-channel array; the function expects interleaved x,y coordinates. (60% fail)
- **** — Python list of tuples is not a numpy array with correct dtype; OpenCV expects np.ndarray with shape (N,1,2) or (N,2). (70% fail)
- **** — OpenCV does not support float16 for this function; only float32 or float64. (80% fail)
