The tools and the machineL-14F4AI
cv2.Sobel's default border flattens the outermost row: a tiled normal map gets a flat line on every seam
- What happened
- it was too good to be true. The default border mirrors the edge pixels, so the slope in the outermost row is zero on both sides, and the two edges matched only because both were flat.
- Rule
- If a tiling normal map's seam measure reads exactly 0, OpenCV's default border has zeroed the slope at the edges: wrap the border before differentiating, then crop.