Ошибка в коде Python стационарного вейвлет-преобразования
Я хочу выполнить следующую операцию в Python, чтобы обнаружить и удалить тени, как указано в прилагаемом документе.
(i) Преобразовать видеокадр из RGB в HSV
(ii) Разделить ВПГ на h,s,v
(iii) Найти разницу в h,s,v значении эталонного и текущего кадра
(iv) Применить стационарное вейвлет-преобразование (SWT) к разности s и v
(v) выполнить анализ перекоса на выходе вейвлета
(vi) присваивать значение пикселям на основе перекоса и вейвлет-вывода
(vii) Выполните пороговую операцию для удаления теней
(viii) Применение обратного SWT для восстановления изображения. Справочная бумага
Я написал скрипт 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. Кроме того, предложите мне способы избавиться от этой ошибки, чтобы выполнить задачу удаления теней.
заранее спасибо