Home › Fóruns › Fórum Detecção de Movimentos com Python e OpenCV › Erro ao executar o “bg mask”
Marcado: GMC, KNN e CNT – implementação 5, MOG
- Este tópico contém 10 respostas, 2 vozes e foi atualizado pela última vez 7 meses atrás por Dalton Vargas.
- AutorPosts
- 17 de fevereiro de 2022 às 21:54 #33141
def main():
while cap.isOpened():
ok, frame = cap.read()
#print(‘frame.shape’)frame = cv2.resize(frame, (0,0), fx=0.5, fy=0.5)
#print(frame.shape)bg_mask = bg_subtractor.apply(frame)
fg_mask = getFiltrer(bg_mask, ‘dilation’)if not ok:
print(‘Erro’)
breakcv2.imshow(‘Frame’, frame)
cv2.imshow(‘BG mask’, bg_mask)
cv2.imshow(‘BG mask filtrer ‘, fg_mask)if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
main()esse é o codigo, porém da esse erro
Traceback (most recent call last):
File “C:\Users\luizf\pythonProject5\outros_algoritmos.py”, line 84, in <module>
main()
File “C:\Users\luizf\pythonProject5\outros_algoritmos.py”, line 80, in main
cv2.imshow(‘BG mask filtrer ‘, fg_mask)
cv2.error: OpenCV(4.5.5) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’18 de fevereiro de 2022 às 19:26 #33146Olá Luiz!
Normalmente o erro -215:Assertion failed ocorre quando não foi possível carregar a imagem/vídeo de entrada.
Poderia compartilhar o código completo? Preciso revisar todas as funções, o carregamento do vídeo, importação das bibliotecas… Este que você mandou tem só as chamadas.
19 de fevereiro de 2022 às 19:17 #33149import numpy as np
import cv2
import sys
from random import randintTEXT_COLOR = (randint(0, 255), randint(0,255), randint (0,255))
BORDER_COLOR = (randint(0, 255), randint(0,255), randint (0,255))
FONT = cv2.FONT_HERSHEY_SIMPLEX
VIDEO_SOURCE =”Video/Traffic_4.mp4″#print (TEXT_COLOR)
BGS_TYPES = (‘GMG’, ‘MOG’, ‘MOG2’, ‘KNN’, ‘CNT’)
#print(BGS_TYPES[1])
def getKernel(KERNEL_TYPE):
if KERNEL_TYPE == ‘dilation’:
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3))
if KERNEL_TYPE == ‘opening’:
kernel = np.ones((3,3), np.uint8)
if KERNEL_TYPE == ‘closing’:
kernel = np.ones((3,3), np.uint8)return kernel
#print(getKernel(‘opening’))def getFiltrer(img, filter):
if filter == ‘closing’:
return cv2.morphologyEx(img, cv2.MORPH_CLOSE, getKernel(‘closing’), iterations=2)
if filter == ‘opening:’:
return cv2.morphologyEx(img, cv2.MORPH_OPEN, getKernel(‘opening’), iterations=2)
if filter == ‘dilation:’:
return cv2.dilate(img, getKernel(‘dilation’), iterations=2)
if filter == ‘combine’:
closing = cv2.morphologyEx(img, cv2.MORPHCLOSE, getKernel(‘closing’), iterations=2)
opening = cv2.morphologyEx(closing, cv2.MORPH_OPEN, getKernel(‘opening’), iterations=2)
dilation = cv2.dilate(opening, getKernel(‘dilation’), iterations=2)
return dilationdef getBGSubtractor(BGS_TYPE):
if BGS_TYPE == ‘GMG’:
return cv2.bgsegm.createBackgroundSubtractorGMG(initializationFrames = 120, decisionThreshold=0.8)if BGS_TYPE == ‘MOG’:
return cv2.bgsegm.createBackgroundSubtractorMOG(history=200, nmixtures=5,
backgroundRatio=0.7, noiseSigma=0)
if BGS_TYPE == ‘MOG2’:
return cv2.createBackgroundSubtractorMOG2(history=500, detectShadows=True, varThreshold=100)if BGS_TYPE == ‘KNN’:
return cv2.createBackgroundSubtractorKNN(history=500, dist2Threshold=400, detectShadows=True)if BGS_TYPE == ‘CNT’:
return cv2.createBackgroundSubtractorCNT(minPixelStability=15, useHistory=True, maxPixelStability=15*60, isParallel=True)print(‘Detector Inválido’)
sys.exit(1)cap = cv2.VideoCapture(VIDEO_SOURCE)
bg_subtractor = getBGSubtractor(BGS_TYPES[0])def main():
while cap.isOpened():
ok, frame = cap.read()
#print(‘frame.shape’)frame = cv2.resize(frame, (0,0), fx=0.5, fy=0.5)
#print(frame.shape)bg_mask = bg_subtractor.apply(frame)
fg_mask = getFiltrer(bg_mask, ‘dilation’)if not ok:
print(‘Erro’)
breakcv2.imshow(‘Frame’, frame)
cv2.imshow(‘BG mask’, bg_mask)
cv2.imshow(‘BG mask filtrer ‘, fg_mask)if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
main()21 de fevereiro de 2022 às 06:51 #33154Oi Luiz!
Estou analisando o código, assim que eu terminar mando aqui pra você.
21 de fevereiro de 2022 às 09:07 #33156certo
21 de fevereiro de 2022 às 09:24 #33157Luiz,
Fiz as correções no seu fonte e testei com todos os BGS, a princípio está tudo funcionando. Segue abaixo:
- Esta resposta foi modificada 2 anos, 9 meses atrás por Dalton Vargas.
21 de fevereiro de 2022 às 09:27 #33161import numpy as np import cv2 import sys from random import randint TEXT_COLOR = (randint(0, 255), randint(0,255), randint (0,255)) BORDER_COLOR = (randint(0, 255), randint(0,255), randint (0,255)) FONT = cv2.FONT_HERSHEY_SIMPLEX # ////////////// # VIDEO_SOURCE =”Video/Traffic_4.mp4″ # Correção: VIDEO_SOURCE = "videos/Traffic_4.mp4" #print (TEXT_COLOR) # ///////////////// # BGS_TYPES = ('GMG', 'MOG', 'MOG2', 'KNN', 'CNT') # Correção: # Neste vetor de BGS deve ser em aspas duplas e não simples, # também estava entre parenteses e o correto é entre colchetes BGS_TYPES = ["GMG", "MOG", "MOG2", "KNN", "CNT"] #print(BGS_TYPES[1]) def getKernel(KERNEL_TYPE): if KERNEL_TYPE == "dilation": kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3)) if KERNEL_TYPE == "opening": kernel = np.ones((3, 3), np.uint8) if KERNEL_TYPE == "closing": kernel = np.ones((3, 3), np.uint8) return kernel #print(getKernel('opening')) def getFiltrer(img, filter): if filter == 'closing': return cv2.morphologyEx(img, cv2.MORPH_CLOSE, getKernel("closing"), iterations=2) if filter == 'opening': return cv2.morphologyEx(img, cv2.MORPH_OPEN, getKernel("opening"), iterations=2) if filter == 'dilation': return cv2.dilate(img, getKernel("dilation"), iterations=2) if filter == 'combine': closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, getKernel("closing"), iterations=2) opening = cv2.morphologyEx(closing, cv2.MORPH_OPEN, getKernel("opening"), iterations=2) dilation = cv2.dilate(opening, getKernel("dilation"), iterations=2) return dilation def getBGSubtractor(BGS_TYPE): # Correção: # deve ser em aspas duplas e não simples, # if BGS_TYPE == 'GMG': if BGS_TYPE == "GMG": return cv2.bgsegm.createBackgroundSubtractorGMG(initializationFrames = 120, decisionThreshold=0.8) # Correção: # deve ser em aspas duplas e não simples, # if BGS_TYPE == 'MOG': if BGS_TYPE == "MOG": return cv2.bgsegm.createBackgroundSubtractorMOG(history=200, nmixtures=5, backgroundRatio=0.7, noiseSigma=0) # Correção: # deve ser em aspas duplas e não simples, # if BGS_TYPE == 'MOG2': if BGS_TYPE == "MOG2": return cv2.createBackgroundSubtractorMOG2(history=500, detectShadows=True, varThreshold=100) # Correção: # deve ser em aspas duplas e não simples, # if BGS_TYPE == 'KNN': if BGS_TYPE == "KNN": return cv2.createBackgroundSubtractorKNN(history=500, dist2Threshold=400, detectShadows=True) # Correção: # deve ser em aspas duplas e não simples, # if BGS_TYPE == 'CNT': if BGS_TYPE == "CNT": # Correção: # Precisa incluir o bgsem para acessar ao BG CNT # return cv2.createBackgroundSubtractorCNT(minPixelStability=15, useHistory=True, maxPixelStability=15*60, isParallel=True) return cv2.bgsegm.createBackgroundSubtractorCNT(minPixelStability=15, useHistory=True, maxPixelStability=15*60, isParallel=True) print("Detector inválido") sys.exit(1) cap = cv2.VideoCapture(VIDEO_SOURCE) bg_subtractor = getBGSubtractor(BGS_TYPES[4]) def main(): while cap.isOpened(): ok, frame = cap.read() #print('frame.shape') if not ok: print('Erro') break frame = cv2.resize(frame, (0,0), fx=0.5, fy=0.5) #print(frame.shape) bg_mask = bg_subtractor.apply(frame) fg_mask = getFiltrer(bg_mask, 'dilation') cv2.imshow('Frame', frame) cv2.imshow('BG mask', bg_mask) cv2.imshow('BG mask filtrer ', fg_mask) if cv2.waitKey(1) & 0xFF == ord('q'): break main()
21 de fevereiro de 2022 às 19:24 #33492boa noite
ainda continua dando erro kkkk22 de fevereiro de 2022 às 06:53 #33494Poderia compartilhar o erro?
22 de fevereiro de 2022 às 14:24 #33553o mesmo erro que eu citei na 1 postagem
13 de maio de 2024 às 07:24 #44798Olá Luiz!
Peço desculpas pela demora absurda em lhe dar o retorno, acabei não recebendo ou vendo a notificação da sua resposta.
Conseguiu resolver o problema? Conforme mencionei em respostas anteriores, normalmente o erro -215:Assertion failed ocorre quando não foi possível carregar a imagem/vídeo de entrada, você chegou a verificar isto? Se os paths para o vídeo estão corretos e se o vídeo existe no path que você informou.
- AutorPosts
- Você deve fazer login para responder a este tópico.