オプティカルフローの上方向のフローのみを画像として可視化するプログラムを作成したのですが,ノイズ除去のためにmedianblurを用いた時にksizeが7以上のときに
OpenCV Error: Assertion failed (src.depth() == 0 && (cn == 1 || cn == 3 || cn == 4)) in medianBlur, file /io/opencv/modules/imgproc/src/smooth.cpp, line 3185
Traceback (most recent call last):
File "teratail.py", line 24, in <module>
thresh = cv2.medianBlur(thresh, 7)
cv2.error: /io/opencv/modules/imgproc/src/smooth.cpp:3185: error: (-215) src.depth() == 0 && (cn == 1 || cn == 3 || cn == 4) in function medianBlur
というエラーが出てしまいます.
ksizeが3や5の場合はエラーは出ません.このエラーの原因と解決法を教えてくださるとありがたいです.
python
1 2#!/usr/bin/env python 3# -*- coding: utf-8 -*- 4import cv2 5import numpy as np 6 7cap = cv2.VideoCapture(0) 8ret, frame1 = cap.read() 9frame1 = cv2.resize(frame1,(240,180)) 10prvs = cv2.cvtColor(frame1,cv2.COLOR_BGR2GRAY) 11 12while True: 13 ret, frame2 = cap.read() 14 frame2 = cv2.resize(frame2,(240,180)) 15 next = cv2.cvtColor(frame2,cv2.COLOR_BGR2GRAY) 16 flow = cv2.calcOpticalFlowFarneback(prvs,next, None, 0.5, 3, 15, 3, 5, 1.2, 0) 17 18 #上向きのフローで,大きさ4以上のものだけを取得 19 flow[...,1][flow[...,1] >= -4] = 0 20 flow2 = -flow[...,1] 21 22 flow3 = cv2.normalize(flow2,None,0,255,cv2.NORM_MINMAX) 23 ret,thresh = cv2.threshold(flow3,200,255,cv2.THRESH_TOZERO) 24 #medianフィルタでノイズ除去 25 thresh = cv2.medianBlur(thresh, 7) 26 27 cv2.imshow('frame2',thresh) 28 cv2.imshow("original",frame2) 29 k = cv2.waitKey(15) & 0xff 30 if k == 27: 31 break 32 elif k == ord('s'): 33 cv2.imwrite('opticalfb.png',frame2) 34 cv2.imwrite('opticalhsv.png',rgb) 35 prvs = next 36 37# キャプチャをリリースして、ウィンドウをすべて閉じる 38cap.release() 39cv2.destroyAllWindows()

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。