【问题标题】:OpenCV - Adaptive-thresholding / effective noise reduction?OpenCV - 自适应阈值/有效降噪?
【发布时间】:2021-04-29 15:28:34
【问题描述】:

我是 OpenCV 的新手,我刚刚阅读了 cv2.adaptiveThreshold() 并决定尝试一下。 可悲的是,我似乎无法摆脱这种巨大的噪音。

有哪些有效的方法可以减少噪点,以便绘制正确的轮廓?最佳做法是什么?为什么?

这里是sn-p:

import cv2
import numpy as np

#####################################
winWidth = 640
winHeight = 840
brightness = 100

cap = cv2.VideoCapture(0)
cap.set(3, winWidth)
cap.set(4, winHeight)
cap.set(10, brightness)

kernel = (5, 5)

###########################################

def preprocessing(frame):
    imgGray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # mask = cv2.inRange(imgHsv, lower, upper)
    imgBlurred = cv2.GaussianBlur(imgGray, kernel, 1)
    gaussC = cv2.adaptiveThreshold(imgBlurred, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
    imgDial = cv2.dilate(gaussC, kernel, iterations=3)
    imgErode = cv2.erode(imgDial, kernel, iterations=1)

    return imgDial


def getcontours(imPrePro):
    contours, hierarchy = cv2.findContours(imPrePro, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
    for cnt in contours:
        cv2.drawContours(imgCon, cnt, -1, (255, 0, 0), 3)





###################################################

while (cap.isOpened()):
    success, frame = cap.read()
    if success == True:
        frame = cv2.flip(frame, 1)
        imgCon = frame.copy()
        imPrePro = preprocessing(frame)
        getcontours(imPrePro)
        cv2.imshow("Preprocessed", imPrePro)
        cv2.imshow("Original", imgCon)

        if cv2.waitKey(1) & 0xFF == ord("q"):
            break

【问题讨论】:

    标签: python numpy opencv computer-vision threshold


    【解决方案1】:

    我认为最好查看blockSizeC 参数。

    形成source

    blockSize:像素邻域的大小,用于计算像素的阈值:3、5、7 等。

    C:从平均值或加权平均值中减去的常数(请参阅下面的详细信息)。通常,它是正数,但也可能是零或负数。

    在您的示例中,您将 C 设置为 2:

    gaussC = cv2.adaptiveThreshold(imgBlurred, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
    
    C=2 C=8

    如您所见,您需要使用blockSizeC 参数才能从adaptive-threshold 获得所需的结果。

    在这个问题中,我们通过增加C 参数来减少噪音。

    【讨论】:

    • 这看起来不错,但我不必更改这些参数,因为 C 基本上是“亮度”,所以我会进入一个新设置吗?还是我理解错了?
    • 那么你需要一个基于深度学习的方法。不幸的是,在自适应阈值中没有适合所有情况的全局参数。
    • 嗯,好吧,我以后可能会这样做。现在我尝试固定参数。这些参数的最大值是多少,所以我可以将它们转换为滑块。
    • 因为adaptive-threhsold是一种用户给定参数的图像处理方法。您希望从当前情况中学习参数。这只有通过深度学习方法才能实现。
    • 如果我现在尝试做背景减法并尝试将它与自适应阈值配对怎么办?
    猜你喜欢
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    相关资源
    最近更新 更多