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

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

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

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

Python

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

Q&A

解決済

2回答

1429閲覧

[OpenCV] エラー TypeError: Expected Ptr<cv::UMat> for argument 'lowerb'

takanaki

総合スコア5

OpenCV

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

Python

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

0グッド

1クリップ

投稿2022/12/14 01:59

編集2022/12/14 05:22

Opencvで画像の中から黒以外の最頻色を抽出して、BGR+-10の範囲の色をinRangeで切り取りたいと思っております。

所々省略してますが、以下のようなコードになります。

Python

1import numpy as np 2import cv2 3from scipy import stats 4img = cv2.imread(filepath) 5img2 = np.copy(img) 6......... 7.............. 8img2 = img2.reshape(-1,3) 9.............. 10......... 11mode_bgr = stats.mode(img2[~np.all(img2 == [0,0,0], axis=-1)])[0].squeeze() 12#この時点でmode_bgrには画像の最頻色(黒を除く)が [int 0-255 , int 0-255, int 0-255] の形で入っていることを確認しました。 13min_bgr = mode_bgr - 20 14max_bgr = mode_bgr + 20 15min_bgr[min_bgr<0] = 0 16max_bgr[max_bgr>255] = 255 17img_binary = cv2.inRange(img, tuple(min_bgr),tuple(max_bgr))

それでこの部分でエラーが表示されます。
img_binary = cv2.inRange(img, tuple(min_bgr),tuple(max_bgr))

TypeError: Expected Ptrcv::UMat for argument 'lowerb'

min_bgr<max_bgrとなっており、imgも正常に読み込まれていることを確認済みです。
どこが間違っているかご指摘願えないでしょうか。
よろしくお願いいたします。

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

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

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

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

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

fuku-chann

2022/12/14 03:40

まずプリント関数でどの行でエラーが出ているか特定されたらいかがでしょうか? https://note.nkmk.me/python-print-basic/ すでにエラーメッセージに記載ありましたら、全文を記載してください。
takanaki

2022/12/14 04:42

エラーはこの行で発生しています。 img_binary = cv2.inRange(img, tuple(min_bgr),tuple(max_bgr))
takanaki

2022/12/14 07:19

教えていただいたURLを参考に img = cv2.inRange(img,np.float32(min_bgr),np.float32(max_bgr)) とすることで解決しました。 どうして今回だけエラーが出たのかは不明のままですが。 ありがとうございました。
guest

回答2

0

投稿2022/12/14 09:24

fuku-chann

総合スコア82

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

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

0

自己解決

img = cv2.inRange(img,np.float32(min_bgr),np.float32(max_bgr))
とすることで解決しました。

投稿2022/12/14 07:19

takanaki

総合スコア5

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

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

fuku-chann

2022/12/14 22:18 編集

私が送った情報で解決されたのですから、こちらの回答をベストアンサーになるように考慮してください。このような形ですと、こちら側に何もメリットが無くなりますので、次回からの回答が難しくなります。ちゃんとサイトの仕組みを理解しましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問