我想在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世界的新手。另外,建议我如何摆脱这个错误,以执行阴影删除任务 提前致谢