OpenCV cómo suavizar el contorno, reduciendo el ruido.

Extraje los contornos de una imagen, que podéis ver aquí: contorno

Sin embargo, tiene algo de ruido. ¿Cómo puedo suavizar el ruido? Hice un primer plano para aclarar lo que quiero decir. introduzca la descripción de la imagen aquí

Imagen original que he usado: introduzca la descripción de la imagen aquí

Código:

rMaskgray = cv2.imread('redmask.jpg', cv2.CV_LOAD_IMAGE_GRAYSCALE) (thresh, binRed) = cv2.threshold(rMaskgray, 50, 255, cv2.THRESH_BINARY) Rcontours, hier_r = cv2.findContours(binRed,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE) r_areas = [cv2.contourArea(c) for c in Rcontours] max_rarea = np.max(r_areas) CntExternalMask = np.ones(binRed.shape[:2], dtype="uint8") * 255 for c in Rcontours: if(( cv2.contourArea(c) > max_rarea * 0.70) and (cv2.contourArea(c)< max_rarea)): cv2.drawContours(CntExternalMask,[c],-1,0,1) cv2.imwrite('contour1.jpg', CntExternalMask) 

    Intente una actualización a OpenCV 3.1.0. Después de algunas adaptaciones de código para la nueva versión como se muestra a continuación, lo probé con OpenCV versión 3.1.0 y no vi ninguno de los efectos que está describiendo.

     import cv2 import numpy as np print cv2.__version__ rMaskgray = cv2.imread('5evOn.jpg', 0) (thresh, binRed) = cv2.threshold(rMaskgray, 50, 255, cv2.THRESH_BINARY) _, Rcontours, hier_r = cv2.findContours(binRed,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE) r_areas = [cv2.contourArea(c) for c in Rcontours] max_rarea = np.max(r_areas) CntExternalMask = np.ones(binRed.shape[:2], dtype="uint8") * 255 for c in Rcontours: if(( cv2.contourArea(c) > max_rarea * 0.70) and (cv2.contourArea(c)< max_rarea)): cv2.drawContours(CntExternalMask,[c],-1,0,1) cv2.imwrite('contour1.jpg', CntExternalMask) 

    introduzca la descripción de la imagen aquí