🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

OpenCV

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2160閲覧

TypeError:Expected Ptr<cv::UMat> for argument '%s' の原因と解決方法

nobu3

総合スコア1

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

OpenCV

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/12/20 15:15

前提・実現したいこと

OpenCVを利用して、物体検知を行いたいです。
「学習済みモデル」を使わず、自力で検出を行う為、「物体を認識」、「輪郭を検出」させたい。

ここに質問の内容を詳しく書いてください。
Google Colab上に写真をアップし、以下コードを実行したところ、cv::UMat型である必要があるとのエラーが出ます。
どのように対応すればよいかわからず困っています。

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

エラーメッセージ TypeError Traceback (most recent call last) <ipython-input-6-3d01ddb11687> in <module>() 34 #検出した輪郭を近似して最適化。 35 for c in contours: ---> 36 epsilon = 0.001 * cv2.arcLength(c, True) 37 approx = cv2.approxPolyDP(c, epsilon, True) TypeError: Expected Ptr<cv::UMat> for argument '%s' ### 該当のソースコード import cv2 import numpy as np birds = cv2.imread('birds.jpg') #鳥の輪郭抽出用 contoured = cv2.imread('birds.jpg') #元画像と鳥の輪郭を抽出した結果を合成するために用意 def binary_threshold_for_birds(img): grayed = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #画像の2値化 under_thresh = 114 #この値より明るい画素(背景)を白にするパラメータ upper_thresh = 150 #この値より明るい画素を黒で強調する(輪郭強調の)パラメータ maxValue = 255 th, drop_back = cv2.threshold(grayed, under_thresh, maxValue, cv2.THRESH_BINARY) th, clarify_born = cv2.threshold(grayed, upper_thresh, maxValue, cv2.THRESH_BINARY_INV) merged = np.minimum(drop_back, clarify_born) morphed = morph_and_blur(merged) return morphed #画像を平滑化する関数 def morph_and_blur(img): kernel = np.ones((3, 3),np.uint8) m = cv2.GaussianBlur(img, (3, 3), 0) m = cv2.morphologyEx(m, cv2.MORPH_OPEN, kernel, iterations=2) m = cv2.GaussianBlur(m, (5, 5), 0) return m birds = binary_threshold_for_birds(birds) #前処理を行った後の画像birdsから輪郭を検出。 #「RETR_EXTERNAL」は最も外側の輪郭を採用。「CHAIN_APPROX_SIMPLE」は、輪郭を圧縮して冗長な点の情報を削除し、コンピュータのメモリを削減。 contours = cv2.findContours(birds, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) #検出した輪郭を近似して最適化。 for c in contours: epsilon = 0.001 * cv2.arcLength(c, True) approx = cv2.approxPolyDP(c, epsilon, True) ```ここに言語名を入力 ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

Google Colaboratory

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

python

1contours = cv2.findContours(birds, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

python

1contours, hierarchy = cv2.findContours(birds, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

参考
輪郭抽出のプログラムでエラーが生じる

投稿2020/12/21 11:29

jbpb0

総合スコア7653

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

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

nobu3

2020/12/21 14:58

解決出来ました!ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問