猿问

为什么自适应阈值图像小于原始图像?

我正在尝试在最终将用于形状检测的实时流上使用adapativeThreshold。常规阈值没有显示足够的我想看到的。当我使用下面的代码时,常规阈值按预期出现,但由于某种原因自适应阈值比原来的要薄得多,我在视图中看不到任何东西。好像有什么事情发生了,但我不知道是什么。关于如何使自适应阈值窗口全尺寸的任何想法?

这是我在每个窗口中运行程序时看到的:

#import packages

from documentscanner.pyimagesearch.transform import four_point_transform

from pyimagesearch.shapedetector import ShapeDetector

from skimage.filters import threshold_local

import numpy as np

import cv2

import imutils



def draw_Contours(screen, points):

    cv2.drawContours(screen, [points], -1, (0, 255, 0), 2)

    cv2.imshow("Outline", screen)



def nothing(x):

    #any operation

    pass


#access video camera

cap = cv2.VideoCapture(0)


cv2.namedWindow('Trackbars')

cv2.createTrackbar('min_edge', 'Trackbars', 75, 100, nothing)

cv2.createTrackbar('max_edge', 'Trackbars', 110,300, nothing)


while True:

    _, frame = cap.read()       #read video camera data


    minedge = cv2.getTrackbarPos('min_edge', 'Trackbars')

    maxedge = cv2.getTrackbarPos('max_edge', 'Trackbars')


    #convert image to gray scale

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    gray = cv2.GaussianBlur(gray, (5, 5), 0)

    #blur = cv2.GaussianBlur(frame, (5, 5), 0)

    #edged = cv2.Canny(gray, minedge, maxedge)


    #threshhold instead of edging

    thresh = cv2.threshold(gray, 60, 255, cv2.THRESH_BINARY)[1]

    thresh2 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\

                                    cv2.THRESH_BINARY, 11, 2)[1]

    thresh3 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C,\

                                    cv2.THRESH_BINARY, 11, 2)[1]


    #find contours in edges image, keeping the largest ones, and initialize the screen contour/shapedetect

    cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    cnts = imutils.grab_contours(cnts)

    sd = ShapeDetector()

    cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:5]

炎炎设计
浏览 126回答 1
1回答

慕沐林林

而不是使用thresh2 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\                                cv2.THRESH_BINARY, 11, 2)[1]thresh3 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C,\                                cv2.THRESH_BINARY, 11, 2)[1]在没有 numpy 索引的情况下使用它,然后就不会发生此错误。thresh2 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\                                cv2.THRESH_BINARY, 11, 2) # don't use [1] thresh3 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C,\                                cv2.THRESH_BINARY, 11, 2)这是因为正常阈值处理返回两个值,而自适应阈值处理只返回一个值。
随时随地看视频慕课网APP

相关分类

Python
我要回答