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

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

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

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

Python

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

Q&A

解決済

1回答

3561閲覧

python初心者 opencv 領域抽出

退会済みユーザー

退会済みユーザー

総合スコア0

OpenCV

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

Python

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

0グッド

0クリップ

投稿2020/06/23 06:05

編集2020/06/23 08:03

全身画像の写真を使用して上半身、下半身に2つの領域で分けるということがしたいです。
ネットで調べていろいろなのを試しているのですがエラーばかりで苦戦しています。

詳しく教えていただけたらありがたいです。

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

error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

該当のソースコード

import cv2 import numpy as np # 指定した画像(path)の物体を検出し、外接矩形の画像を出力します def detect_contour(path): # 画像を読込 src = cv2.imread("image2.jpg", cv2.IMREAD_COLOR) # グレースケール画像へ変換 gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) # 2値化 retval, bw = cv2.threshold(gray, 50, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU) # 輪郭を抽出 # contours : [領域][Point No][0][x=0, y=1] # cv2.CHAIN_APPROX_NONE: 中間点も保持する # cv2.CHAIN_APPROX_SIMPLE: 中間点は保持しない contours, hierarchy = cv2.findContours(bw, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE) # 矩形検出された数(デフォルトで0を指定) detect_count = 0 # 各輪郭に対する処理 for i in range(0, len(contours)): # 輪郭の領域を計算 area = cv2.contourArea(contours[i]) # ノイズ(小さすぎる領域)と全体の輪郭(大きすぎる領域)を除外 if area < 1e2 or 1e5 < area: continue # 外接矩形 if len(contours[i]) > 0: rect = contours[i] x, y, w, h = cv2.boundingRect(rect) cv2.rectangle(src, (x, y), (x + w, y + h), (0, 255, 0), 2) # 外接矩形毎に画像を保存 cv2.imwrite('{"C:\Users\Documents}' + str(detect_count) + '.jpg', src[y:y + h, x:x + w]) detect_count = detect_count + 1 # 外接矩形された画像を表示 cv2.imshow('output', src) cv2.waitKey(0) # 終了処理 cv2.destroyAllWindows() if __name__ == '__main__': detect_contour('{"C:\Users\Documents}/{image}.jpg')

試したこと

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

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

numpyというのはインストールできていないです。

追記:
再度やったらできたのですが上半身を囲むことはできないのでしょうか。
イメージ説明

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

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

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

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

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

tiitoi

2020/06/23 07:10

import os print(os.path.abspath("image2.jpg")) で相対パスが指している絶対パスを確認できるので、そこにファイルがあるかどうかチェックしてください
退会済みユーザー

退会済みユーザー

2020/06/23 07:17

確認したところファイルはありました。
tiitoi

2020/06/23 07:21

エラーが出ているのが cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) の行だとしたら、ファイルの読み込みに失敗していますよ。 print(src) とすると None となっていると思います。 os モジュールでファイルが存在するかどうか確認できますので、以下が True になるかどうかチェックしてください。 print(os.path.exists("image2.jpg")) もしこれが False になったら、ファイルが存在していないことになります。
退会済みユーザー

退会済みユーザー

2020/06/23 07:25

print(src)を入力したら数字がたくさん出てきました。 print(os.path.exists("image2.jpg"))はTrueでした。
tiitoi

2020/06/23 07:29

だとしたら、ファイルが読み込めています。 そうであれば、gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) でエラーが出るはずがないのですが、エラーが発生しているのはその行であっていますか?
退会済みユーザー

退会済みユーザー

2020/06/23 07:33

def detect_contour("C:\Users\Documents"): ^ SyntaxError: invalid syntax こんな感じでエラーが出てしまいます。
Penpen7

2020/06/23 07:39 編集

ご質問のコードから書き換わってますか? コードを修正したら、再度貼り付けてください。
退会済みユーザー

退会済みユーザー

2020/06/23 07:44

ファイルがあるかどうかの確認をしただけなのでコードは変わってないです。
Penpen7

2020/06/23 07:45

def detect_contour(path):がdef detect_contour("C:\Users\Documents"):に書き換わっていますが...元に戻さないのですか?
退会済みユーザー

退会済みユーザー

2020/06/23 07:58

戻します。すいません。
Penpen7

2020/06/23 08:08

エラーは解決しましたか?
退会済みユーザー

退会済みユーザー

2020/06/23 08:10

解決しました。ありがとうございます。 追加の質問も書かせていただいたんでもし分かるようでしたらよろしくお願いします。
Penpen7

2020/06/23 08:29

でしたら、一度この質問は解決済みとし、追加の質問に関しては別に質問を立てられたほうが回答がつきやすいと思います。gdgd_tink様が原因と解決策を回答に書いて、ご自分の回答をベストアンサーとしてください。ご面倒だとは思いますがよろしくお願いします。
guest

回答1

0

ベストアンサー

numpyがなければimport時点で落ちると思うので、numpyは入っているものと思います。
以下によると、画像ファイルがないことでエラーが出るようですが、imege2.jpgはカレントディレクトリに置いてあるor名前はあってますか?
https://ja.stackoverflow.com/questions/49260/python3-6-6%E3%81%AB%E3%81%A6cv2%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%BE%E3%81%99

投稿2020/06/23 06:57

Penpen7

総合スコア698

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

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

退会済みユーザー

退会済みユーザー

2020/06/23 07:04

"path"と書かれているところには"C:\Users\Documents"このようなコードを書いています。image2.jpgの場所は合ってると思います。
Penpen7

2020/06/23 07:13

拡張子の誤りはありませんか?tiitoi様の回答を参考に、絶対パスを確認してください。
退会済みユーザー

退会済みユーザー

2020/06/23 07:35

日本語は入ってないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問