为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

炎炎设计 2022-07-26 16:55:19
我正在尝试在最终将用于形状检测的实时流上使用adapativeThreshold。常规阈值没有显示足够的我想看到的。当我使用下面的代码时,常规阈值按预期出现,但由于某种原因自适应阈值比原来的要薄得多,我在视图中看不到任何东西。好像有什么事情发生了,但我不知道是什么。关于如何使自适应阈值窗口全尺寸的任何想法?这是我在每个窗口中运行程序时看到的:#import packagesfrom documentscanner.pyimagesearch.transform import four_point_transformfrom pyimagesearch.shapedetector import ShapeDetectorfrom skimage.filters import threshold_localimport numpy as npimport cv2import imutilsdef 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 cameracap = 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]
查看完整描述

1 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

而不是使用


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)

这是因为正常阈值处理返回两个值,而自适应阈值处理只返回一个值。


查看完整回答
反对 回复 2022-07-26
  • 1 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号