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

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

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

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

Q&A

解決済

1回答

1107閲覧

画像をダウンサンプリングして原画像の周辺を切り出す。

takashi_1111

総合スコア24

Python

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

0グッド

0クリップ

投稿2020/08/11 00:08

編集2020/08/11 04:35

イメージ説明

import cv2 # 動画ファイルを読み込みclassオブジェクトに入れる img = cv2.imread(r'path') # ####グレースケール画像に変換 #### S gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.imshow('aaa', gray) # ####グレースケール画像に変換 #### E # #####1/4ダウンサンプリング##### S r1 = cv2.pyrDown(gray) cv2.imshow('PyrDown1', r1) # #####1/4ダウンサンプリング##### E # #### エッジ検出 #### S edges = cv2.Canny(r1, 190, 380) cv2.imshow('edge', edges) # #### エッジ検出 #### E # 輪郭取得 contours,hierarchy = cv2.findContours(edges,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) # 面積が最大の輪郭を選択する。 cnt = max(contours, key=lambda x: cv2.contourArea(x)) # 外接矩形を取得する。 (x,y),radius = cv2.minEnclosingCircle(cnt) center = (int(x), int(y)) radius = int(radius) en1= cv2.circle(r1, center, radius, (0, 255, 0), 2) cv2.imshow('en1', en1) roi = gray[y:y + radius + 10, x:x + radius + 10] cv2.imshow('roi', roi)    cv2.waitKey(0) cv2.destroyAllWindows() コード

質問:
自分でコードを書いてみました。(合っているか分かりませんが)
問題点が2つあります。
1つ目は外接矩形で取得したcenterとradiusをint型にして
roi = gray[y:y + radius + 10, x:x + radius + 10]に入れたのですが、下記のエラーが出ます。
<エラー内容>
TypeError: slice indices must be integers or None or have an index method

2つ目はcv2.imshow()で画面が表示できない。応答していませんとエラーがでます。
cv2.waitkey(0)とcv2.destroyAllWindows()がないとこの現象が起きるとネットたのですが、
付け加えても改善されません。

どなたか改善方法を教えてください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず画面が表示されない件ですが、cv2.imshow()のあとにcv2.waitKey(0)を入れればよいです。

次にエラーについてですがprint(x, y)すれば分かりますが、これらはfloatです。
一方スライスで指定する値は整数でなければならないので提示エラーが発生しています。
また、切り取り元としてgrayを指定していますが、画像の大きさが異なります。
ダウンサンプリング後のroiでなければなりません。
以上を踏まえると、以下のように記述すればよいかと思います。

Python

1#roi = gray[y:y + radius + 10, x:x + radius + 10] 2x, y = int(x), int(y) 3roi = r1[y - radius - 10 : y + radius + 10, x -radius - 10 : x + radius + 10]

イメージ説明

投稿2020/08/11 01:41

can110

総合スコア38278

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問