質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

2回答

5118閲覧

円を動画上に表示できるようにしたいです

退会済みユーザー

退会済みユーザー

総合スコア0

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2017/12/09 09:19

###前提・実現したいこと
ボールジャグリングの動画のボール部分を円で追跡したい
なぜ輪郭検出の段階でエラーが発生するのかが分からない
膨張処理の段階までは問題なし
今現在は円は一つだけ検出できればOK

###発生している問題・エラーメッセージ

line 56, in <module> image, cnts, hierarchy = cv2.findContours(gray_frame,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE) error: ......\modules\imgproc\src\contours.cpp:198: error: (-210) [Start]FindContours supports only CV_8UC1 images when mode != CV_RETR_FLOODFILL otherwise supports CV_32SC1 images only in function cvStartFindContours

###該当のソースコード

Python

1# -*- coding: utf-8 -*- 2""" 3Created on Mon Nov 27 16:39:15 2017 4 5@author: user4 6""" 7 8import cv2 9import numpy as np 10 11# 定数定義 12ESC_KEY = 27 # Escキー 13INTERVAL= 10 # インターバル 14FRAME_RATE = 30 # fps 15 16WINDOW_ORG = "org" 17WINDOW_BACK = "back" 18WINDOW_DIFF = "diff" 19 20neiborhood4 = np.array([[0, 1, 0], 21 [1, 1, 1], 22 [0, 1, 0]], 23 np.uint8) 24 25# ウィンドウの準備 26cv2.namedWindow(WINDOW_ORG) 27 28# 元ビデオファイル読み込み 29mov_org = cv2.VideoCapture("jugg.mp4") 30 31# 最初のフレーム読み込み 32has_next, i_frame = mov_org.read() 33 34# 背景フレーム 35back_frame = np.zeros_like(i_frame, np.float32) 36 37 38# 変換処理ループ 39while has_next == True: 40 # 入力画像を浮動小数点型に変換 41 f_frame = i_frame.astype(np.float32) 42 43 # 差分計算 44 diff_frame = cv2.absdiff(f_frame, back_frame) 45 46 # 背景の更新 47 cv2.accumulateWeighted(f_frame, back_frame, 0.025) 48 49 #閾値処理 50 _, diff_frame = cv2.threshold(diff_frame,127,255,cv2.THRESH_BINARY) 51 #グレースケール化 52 gray_frame = cv2.cvtColor(diff_frame, cv2.COLOR_RGB2GRAY) 53 #膨張処理 54 gray_frame = cv2.dilate(gray_frame,neiborhood4,iterations = 1) 55 #輪郭検出 56 image, cnts, hierarchy = cv2.findContours(gray_frame,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE) 57 #輪郭が一つでもあったとき 58 if len(cnts) > 0: 59 #最大の輪郭を検出 60 c = max(cnts, key=cv2.contourArea) 61 #最大面積の最小包囲円の座標と半径を検出 62 ((x, y), radius) = cv2.minEnclosingCircle(c) 63 #円の線画 64 if 70>radius>10: 65 cv2.circle(i_frame, (int(x), int(y)), int(radius),(0, 0, 255), 2) 66 67 # フレーム表示 68 cv2.imshow(WINDOW_ORG,i_frame) 69 70 # Escキーで終了 71 key = cv2.waitKey(INTERVAL) 72 if key == ESC_KEY: 73 break 74 75 # 次のフレーム読み込み 76 has_next, i_frame = mov_org.read() 77 78# 終了処理 79cv2.destroyAllWindows() 80mov_org.release()

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
windows7/Anaconda3.4.4/Spyder3(Python3.5)/OpenCV 3.1.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

image, cnts, hierarchy = cv2.findContours(gray_frame,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
リターンの戻り値の数が3つになっていますが、OpenCVのバージョンによって
2つの場合がありますので以下のようにお試しいただけませんでしょうか。
image, cnts = cv2.findContours(gray_frame,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)

投稿2020/07/14 00:03

mamonPro

総合スコア38

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

素直にエラーを受け止めると、以下の関連でしょうか。

https://stackoverflow.com/questions/38438646/findcontours-support-only-8uc1-and-32sc1-images

投稿2017/12/09 09:45

mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/12/15 02:41

グレースケールは行われているので、リンク先の解決方法では解決しませんでした。 エラーメッセージ曰く、 image, cnts, hierarchy = cv2.findContours(gray_frame,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE) の行に問題ありらしいのですが、どこがどうおかしいのかがわかりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問