静态小波变换python代码中的错误

时间:2017-11-13 08:20:14

标签: python wavelet

我想在python中执行以下操作来检测和删除附加文档中给出的阴影 (i)将视频帧从RGB转换为HSV
(ii)将HSV拆分为h,s,v
(iii)找出参考和当前帧的h,s,v值的差异
(iv)将平稳小波变换(SWT)应用于差值s和v
(v)对小波输出进行偏斜分析
(vi)基于偏斜和小波输出将值分配给像素 (vii)执行阈值操作以移除阴影
(viii)应用逆SWT来重建图像 REFERENCE PAPER
我编写了python脚本,并在运行swt命令时遇到以下错误。

File "F:/Shoba/shadow_spinger.py", line 37,
  in <module> swts=pywt.swt(diffs,'db1',level=None,start_level=None)
File "C:\Users\pc13\Anaconda3\envs\pythonopencv\lib\site-packages‌​\pywt_swt.py", line 74,
  in swt ret = _swt_axis(data, wavelet, level, start_level, axis) 
File "pywt/_extensions/_swt.pyx", line 101,
  in pywt._extensions._swt.swt_axis (pywt_extensions_swt.c:5788) TypeError: an integer is required 

我的代码如下:

import numpy as np
import cv2
import pywt
from scipy.stats import skew
cap = cv2.VideoCapture('cam4v.mp4')

while(1):
    ret, frame = cap.read()
    hsvImg=cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    #cv2.imshow('hsvImg',hsvImg)
    h,s,v=cv2.split(hsvImg)
    diffh=cv2.absdiff(h[1],h[0]).astype(np.uint8)
    diffs=cv2.absdiff(s[1],s[0]).astype(np.uint8)
    diffv=cv2.absdiff(v[1],v[0]).astype(np.uint8)
    print("diffh: {0} ".format(diffh))
    print("diffs: {0} ".format(diffs))
    print("diffv: {0} ".format(diffv))

    swts=pywt.swt(diffs,'haar',level=None,start_level=None)
    swtv=pywt.swt(diffv,'haar',level=None,start_level=None)
    skews=skew(swts)
    skewv=skew(swtv)
    swtv[skewv>swtv] = 255
    swtv[skewv<swtv] = 0
    swts[(skewv>swtv) & (skews>swts)] = 255
    swts[(skewv<swtv) & (skews<swts)] = 0
    iswts=pywt.iswt(swts,'haar',level=None,start_level=None,axes=None)
    iswtv=pywt.iswt(swtv,'haar',level=None,start_level=None,axes=None)


    finalhsv=cv2.merge((h,iswts,iswtv))
    cv2.imshow('frame',finalhsv)
    if cv2.waitKey(10) == 27:                     # exit if Escape is hit
      break

cv2.waitKey(0)
cv2.destroyAllWindows()
cap.release()

如果你觉得问题太基础了,不要降级它,因为我是python世界的新手。另外,建议我如何摆脱这个错误,以执行阴影删除任务 提前致谢

0 个答案:

没有答案