¿Hay una función similar a OpenCV findContours que detecta curvas y reemplaza puntos con una spline?

Estoy tratando de tomar la siguiente imagen, trazar la forma blanca y exportar la ruta resultante a pdf. El problema que tengo es que parece que findContours solo encuentra puntos a lo largo del borde de la forma. ¿Existe alguna solución, similar a findContours, que detecte curvas en una forma y reemplace sus puntos con una spline donde haya una curva? Si uso scipy.interpolate, ignora las líneas rectas y convierte todo el contorno en una gran forma curva, lo que tampoco es bueno. Necesito algo que haga las dos cosas.

import numpy as np
import cv2
from scipy.interpolate import splprep, splev
from pyx import *
import matplotlib.pyplot as plt

#read in image file                                                             
original = cv2.imread('test.jpg')

#blur the image to smooth edges                                                 
im = cv2.medianBlur(original,5)

#threshold the image                                                            
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,170,255,cv2.THRESH_BINARY)                                                             

#findContours                                                                   
im2, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_\
APPROX_SIMPLE)

#drawContours
cv2.drawContours(original, [approx], -1, (0,255,0), 3)                          
cv2.imshow("Imageee", original)                                                 
cv2.waitKey(0)

Respuestas a la pregunta(3)

Su respuesta a la pregunta