python - OpenCV如何平滑轮廓,降低噪声

标签 python opencv contour noise smoothing

我提取了图像的轮廓,您可以在此处看到: contour

但是,它有一些噪音。 我怎样才能消除噪音?我做了一个特写,以更清楚地说明我想要表达的意思 enter image description here

我使用的原始图像: enter image description here

代码:

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)

最佳答案

尝试升级到 OpenCV 3.1.0。在对新版本进行了一些代码调整后,如下所示,我用 OpenCV 版本 3.1.0 进行了尝试,但没有看到您描述的任何效果。

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)

enter image description here

关于python - OpenCV如何平滑轮廓,降低噪声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37068448/

相关文章:

python - 如何在 3D 曲面图中绘制 x、y、z 的 numpy 数组?

c# - 使用 OpenCV 获取二值图像中白色像素数量的最快方法

r - 找到最大轮廓并在 imageR 包中应用蒙版

opencv - 将轮廓简化为固定长度,以平滑多个帧

image-processing - 如何使用opencv查找凸性缺陷?

python - 条形图上的值无法正确显示

python - 如何打印小数点后 3 位的 numpy 数组?

python - 如何将 Spark 数据帧行拆分为列?

opencv - 使用 Tesseract 进行鸡蛋标记识别的图像预处理

android - 透视变换