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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

OpenCV

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

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

Python

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

Q&A

解決済

1回答

2168閲覧

ファイル内にある写真の輪郭を出力したい。

YUMA-NAGAO

総合スコア41

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

OpenCV

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

OS

OS(オペレーティングシステム)は、システムソフトウェアの一種であり、一般的に、ハードウェアを直接的に管理・操作する最も中心的な機能を有するソフトウェアがオペレーティングシステムとして呼ばれます。

Python

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

0グッド

0クリップ

投稿2020/01/16 07:55

#前提・実現したいこと
1、指定したファイルに入っている、写真を全て読み込む
2、読みこんだ写真の中から、輪郭を抽出する
3、輪郭を写真に書き込み、別のファイルに保存する

この一連の流れを実現したいと考えております。
1に関しては、出来ました。
また、輪郭を抽出して、ほかのフォルダに保存するということも単体では、出来ています。

それぞれを一つの機能とした時に、失敗しました。

#試したこと
【Python】フォルダ内の画像サイズを一括で変換【コピペで実行】こちらのサイトを参考にして、フォルダ内の画像サイズを変換することは、出来ました。
しかし、PILを扱ったことがなく、今までに使っていた、OpenCVを使い、輪郭検出を行い、一括保存しようとして、失敗しました。

また、下記のサイトを参考に実現しようとしました。
Python OpneCV 輪郭抽出について
OpenCV 3.0.0 beta: Error with drawing contours
OpenCVの公式アンサーサイト
#発生している問題・エラーメッセージ

エラーメッセージ

20191226_084755の変換完了! --------------------------------------------------------------------------- error Traceback (most recent call last) <ipython-input-16-88238be16f77> in <module> 19 # 輪郭を1つずつ書き込んで出力 20 im_con = im.copy() ---> 21 cv2.drawContours(im_con, contours, count, (0,255,0), 2) 22 23 full_file, ext = os.path.splitext(f) error: OpenCV(4.1.1) C:\projects\opencv-python\opencv\modules\imgproc\src\drawing.cpp:2498: error: (-215:Assertion failed) 0 <= contourIdx && contourIdx < (int)last in function 'cv::drawContours'

#該当のソースコード

Python

1import os 2import glob 3import cv2 4# Setting(ここを変更して希望のサイズに変換) 5dir_location =r'C:\Users\Pictures/' 6save_location =r'C:\Users\Pictures\PCI/' 7# 取得ファイル形式一覧 8ext_list =('/*.jpg','/*.jpeg','/*.gif','/*.png') 9count=0 10for n in range(len(ext_list)): 11 file_path = dir_location + ext_list[n] 12 file_list = glob.glob(file_path) 13 for f in file_list: 14 im = cv2.imread(f) 15 16 im_gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) 17 retval, im_bw = cv2.threshold(im_gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) 18 19 # 輪郭の検出 20 contours, hierarchy = cv2.findContours(im_bw, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 21 22 # 全ての輪郭を書き込んで出力 23 im_con = im.copy() 24 cv2.drawContours(im_con, contours, -1, (0,255,0), 2) 25 cv2.imwrite(save_location +'/'+ name + '_resize' + ext, im_con) 26 27 # 輪郭を1つずつ書き込んで出力 28 im_con = im.copy() 29 cv2.drawContours(im_con, contours, count, (0,255,0), 2) 30 31 full_file, ext = os.path.splitext(f) 32 name = os.path.basename(full_file) 33 cv2.imwrite(save_location +'/'+ name + '_resize' + ext, im_con) 34 print(name+'の変換完了!') 35 count+=1 36print('画像の変換完了')

#教えていただきたいこと
2点あります。

1、このコードをどのように変えればいのか?
2、解決方法を導き方(解決方法を導く考え方)

この2点を教えていただきますと幸いです!

自力で解決できるようになりたいので!

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

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

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

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

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

t_obara

2020/01/16 08:15

単体で確認した際にうまくいくファイルと、まとめたときに失敗するファイルが異なるのではないですか?失敗するときのファイル名を確認し、単体で輪郭検出できるか確認されてみてはいかがでしょうか。
YUMA-NAGAO

2020/01/16 23:30

コメントありがとうございます。 ファイルは、変わっていないです。 https://w-pylog.com/entry/2019/05/19/093007 PILのImageを使わずに、OpenCVを使って、写真の輪郭検出をしたいと考えています。 単体では、完了しました。という風に出るのですが、複数の状態では、でないのです。 なので、どのようにすればいいのかが疑問です。
guest

回答1

0

自己解決

うまく2値化が出来ていませんでした。
【解決方法】

画像のAdobeのPhotoShopなどを使用して、RGB解析を行う
RGBそれぞれで、2値化を行う
その中で、一番輪郭がはっきりする色を理解する
一番輪郭がはっきりする色で2値化を行う
一番はっきりする色を複数枚に適用する
この流れで解決することが出来ました。

投稿2020/04/06 11:41

YUMA-NAGAO

総合スコア41

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問