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

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

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

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

Python

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

Q&A

解決済

1回答

4684閲覧

pythonのエラーがわかりません。画像処理をしています。

na_na

総合スコア7

OpenCV

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

Python

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

0グッド

0クリップ

投稿2020/01/24 07:59

画像から一定の大きさ以下のオブジェクトを消したいと思っているのですが、エラーが出ています。
エラーの意味を教えてください。

Python3.7.3

1#-*- coding:utf-8 -*- 2import cv2 3import numpy as np 4 5def remove_objects(img, lower_size=None, upper_size=None): 6 # find all objects 7 nlabels, labels, stats, centroids = cv2.connectedComponentsWithStats(img) 8 9 sizes = stats[1:, -1] 10 _img = np.zeros((labels.shape)) 11 12 # process all objects, label=0 is background, objects are started from 1 13 for i in range(1, nlabels): 14 15 # remove small objects 16 if (lower_size is not None) and (upper_size is not None): 17 if lower_size < sizes[i - 1] and sizes[i - 1] < upper_size: 18 _img[labels == i] = 255 19 20 elif (lower_size is not None) and (upper_size is None): 21 if lower_size < sizes[i - 1]: 22 _img[labels == i] = 255 23 24 elif (lower_size is None) and (upper_size is not None): 25 if sizes[i - 1] < upper_size: 26 _img[labels == i] = 255 27 28 return _img 29 30 31 32#if __name__ == '__main__': 33img_a = cv2.imread('21/image21_4.jpg') 34''' 35 # change color space 36 img_Lab = cv2.cvtColor(img, cv2.COLOR_BGR2Lab) 37 38 # smoothing 39 img_Lab = cv2.GaussianBlur(img_Lab, (5, 5), 3) 40 img_L, img_a, img_b = cv2.split(img_Lab) 41''' 42 # binary transformation 43 #thre, img_greenarea = cv2.threshold(img_a, 120, 255, cv2.THRESH_BINARY_INV) 44 45 # remove very-large and very-small objects 46img_greenarea_clean = remove_objects(img_a, lower_size=300, upper_size=None) 47 48 # save 49 # cv2.imwrite('output.beans_field.cleanobj.before.jpg', img_greenarea) 50cv2.imwrite('21/clean.jpg', img_greenarea_clean)

エラー

File "yobi.py", line 46, in <module> img_greenarea_clean = remove_objects(img_a, lower_size=300, upper_size=None) File "yobi.py", line 7, in remove_objects nlabels, labels, stats, centroids = cv2.connectedComponentsWithStats(img) cv2.error: OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\imgproc\src\connectedcomponents.cpp:3927: error: (-215:Assertion failed) L.channels() == 1 && I.channels() == 1 in function 'cv::connectedComponents_sub1'

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

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

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

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

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

guest

回答1

0

ベストアンサー

connectedComponentsWithStatsの引数は 8bit1ch の画像でなければならないところに,
マルチチャンネルな(カラーの)画像を渡しているのではないでしょうか.

投稿2020/01/24 08:14

fana

総合スコア11654

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

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

fana

2020/01/24 08:19

CVのエラーは,メッセージを見ましょう.今回は > channels() == 1 とか出ているので,画像のch数が問題だと推測できる. (「channels() == 1」は「1chでなきゃならないのにそうじゃないやつがいるからダメ」という意味.) →connectedComponentsWithStatsをリファレンスで見れば,"the 8-bit single-channel image to be labeled" と書いてあるので裏が取れる. →自分が渡している img は何chになってるのかを確認 …という順で調べればよいです.
na_na

2020/01/24 08:27

解説ありがとうございます! グレイスケールで読み込んだところ解決いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問