带有AdaptiveThreshold的OpenCV错误

pbu*_*pbu 3 python opencv

我正在尝试通过openCV捕获视频,然后在视频上应用自适应阈值(以转换为黑白)。问题是此代码经常引发错误。我在自适应阈值功能中处理最后两个数字。

cv2.error: /tmp/opencv-UA2sOU/opencv-2.4.9/modules/imgproc/src/thresh.cpp:797: error: (-215) blockSize % 2 == 1 && blockSize > 1 in function adaptiveThreshold

我似乎无法理解导致此问题的原因。

import numpy as np
import cv2
import pylab as pl

cap = cv2.VideoCapture(0)


# take first frame of the video
ret,frame = cap.read()

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read() 
    thresh = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,40,15)

    cv2.imshow('frame',thresh)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        #cv2.imwrite("snap.jpg", thresh)
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

Fal*_*lko 5

cv2.adaptiveThreshold需要一个奇数blockSize。因此,您需要使用39或41而不是40。

blockSize –像素邻域的大小,用于计算像素的阈值:3、5、7,依此类推。

错误消息表明了这一点:它显示为“ blockSize % 2 == 1”,表示blockSize不能被2整除。

  • 尽管具有均匀窗口大小的实现可能是可能的,但通常需要围绕像素的对称窗口。这仅适用于奇数窗口大小,例如具有恒定宽度边框的像素。否则,平均值将在一侧比另一侧涉及更多像素。 (3认同)