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

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

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

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

Python

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

Q&A

解決済

1回答

1397閲覧

同じような処理を2度実行したい python opencv

0126tami

総合スコア60

OpenCV

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

Python

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

0グッド

0クリップ

投稿2019/12/31 13:22

画像はkuro1.pngで1つの画像を2回に分けて処理したいです

1つ目の処理と2つの目の処理は少しずつ違っているのですが
ラベリング処理は両方行います

しかし下記のようなプログラムではエラーが出ます
どう直せば良いでしょうか

import cv2 import numpy as np from matplotlib import pyplot as plt (((この部分は後から使いたいとおもって書いているだけ # 変換前後の対応点を設定 p_original = np.float32([[247,388], [805,408], [17, 833], [1063, 860]]) p_trans = np.float32([[0,0], [500,0], [0,690], [500,690]]) # 変換マトリクスと射影変換 M = cv2.getPerspectiveTransform(p_original, p_trans) )) src= cv2.imread("kuro1.png") #色抽出 dst1 = cv2.inRange(src, (3,3,3), (10,8,10)) dst2 = cv2.blur(dst1, ksize=(5,5)) cv2.imshow("b",dst2) ret,thresh1 = cv2.threshold(dst2,127,255,cv2.THRESH_BINARY) # ラベリング処理(詳細版) label = cv2.connectedComponentsWithStats(thresh1) ### 追加した部分1 stats = label[2] area = stats[:, cv2.CC_STAT_WIDTH] * stats[:, cv2.CC_STAT_HEIGHT] top2_idx = area.argsort()[-3:-1] # 2番目、3番めに面積が大きいラベル (1番目は背景なので除く) # オブジェクト情報を項目別に抽出 data = label[2] center = label[3] # ラベリング結果書き出し用に二値画像をカラー変換 color_src = cv2.cvtColor(thresh1, cv2.COLOR_GRAY2BGR) # オブジェクト情報を利用してラベリング結果を表示 for i in top2_idx: # 各オブジェクトの外接矩形を赤枠で表示 x0 = data[i][0] y0 = data[i][1] x1 = data[i][0] + data[i][2] y1 = data[i][1] + data[i][3] cv2.rectangle(color_src, (x0, y0), (x1, y1), (0, 0, 255)) # 各オブジェクトの重心座標をに黄文字で表示 cv2.putText(color_src, "X: " + str(int(center[i][0])), (x1 - 10, y1 + 15), cv2.FONT_HERSHEY_PLAIN, 1, (0, 255, 255)) #「背景」となる画像の取り込み(グレースケール) img_src01 = cv2.imread("zero1.png", 0) #「差分」をもった画像の取り込み(グレースケール) img_src02 = cv2.imread("kuro1.png", 0) #「背景差分」計算用オブジェクトの作成  bgObj = cv2.bgsegm.createBackgroundSubtractorMOG() #差分となっている「前景領域」に対してマスクをかける fgmask = bgObj.apply(img_src01) fgmask = bgObj.apply(img_src02) # グレースケール化 gray = cv2.cvtColor(fgmask, cv2.COLOR_BGR2GRAY) # ラベリング処理(詳細版) label2 = cv2.connectedComponentsWithStats(gray) ### 追加した部分1 stats2 = label2[2] area2 = stats2[:, cv2.CC_STAT_WIDTH] * stats2[:, cv2.CC_STAT_HEIGHT] top2_idx2 = area2.argsort()[-3:-1] # 2番目、3番めに面積が大きいラベル (1番目は背景なので除く) # オブジェクト情報を項目別に抽出 data2 = label2[2] center2 = label2[3] # ラベリング結果書き出し用に二値画像をカラー変換 color_src2 = cv2.cvtColor(gray, cv2.COLOR_GRAY2BGR) # オブジェクト情報を利用してラベリング結果を表示 for i in top2_idx2: # 各オブジェクトの外接矩形を赤枠で表示 x0 = data2[i][0] y0 = data2[i][1] x1 = data2[i][0] + data2[i][2] y1 = data2[i][1] + data2[i][3] cv2.rectangle(color_src2, (x0, y0), (x1, y1), (0, 0, 255)) # 各オブジェクトの重心座標をに黄文字で表示 cv2.putText(color_src2, "Y: " + str(int(y1)), (x1 - 10, y1 + 30), cv2.FONT_HERSHEY_PLAIN, 1, (0, 255, 255)) cv2.imshow('haikei',color_src2) cv2.waitKey(0) cv2.destroyAllWindows()

エラー文

gray = cv2.cvtColor(fgmask, cv2.COLOR_BGR2GRAY) cv2.error: OpenCV(4.1.1) /Users/travis/build/skvark/opencv-python/opencv/modules/imgproc/src/color.simd_helpers.hpp:92: error: (-2:Unspecified error) in function 'cv::impl::(anonymous namespace)::CvtHelper<cv::impl::(anonymous namespace)::Set<3, 4, -1>, cv::impl::(anonymous namespace)::Set<1, -1, -1>, cv::impl::(anonymous namespace)::Set<0, 2, 5>, cv::impl::(anonymous namespace)::SizePolicy::NONE>::CvtHelper(InputArray, OutputArray, int) [VScn = cv::impl::(anonymous namespace)::Set<3, 4, -1>, VDcn = cv::impl::(anonymous namespace)::Set<1, -1, -1>, VDepth = cv::impl::(anonymous namespace)::Set<0, 2, 5>, sizePolicy = cv::impl::(anonymous namespace)::SizePolicy::NONE]' > Invalid number of channels in input image: > 'VScn::contains(scn)' > where > 'scn' is 1

このようなエラーが出るのですが全くわかりません泣
アドバイスよろしくお願いします

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

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

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

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

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

meg_

2019/12/31 13:38

"fgmask"の内容はどうなっていますか?
meg_

2019/12/31 14:53

"fgmask"の中身がどうなっているのか?という質問でした。 cv2.cvtColor()でエラーが出るのは、この配列の中身が何かおかしいのではないか?と思うからです。
guest

回答1

0

ベストアンサー

これまたよくわからんエラーですね。
とりあえずfgmaskの型を確認してみてはいかがでしょう?

投稿2019/12/31 20:03

HBenpitsu

総合スコア18

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問