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

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

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

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

Q&A

1回答

694閲覧

TypeError: slice indices must be integers or None or have an __index__ methodの対処の仕方

labshirasawa_

総合スコア4

Python

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

0グッド

0クリップ

投稿2020/09/03 06:25

前提・実現したいこと

画像の2次元フーリエ変換を行い、ハイパスフィルタによってエッジ画像を作成したい

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

TypeError Traceback (most recent call last) <ipython-input-21-679f5a4e9e7b> in <module> 23 print(ccol) 24 ---> 25 fshift[crow-30.0:crow+30.0, ccol-30.0:ccol+30.0] = 0.0 26 f_ishift = np.fft.ifftshift(fshift) 27 img_back = np.fft.ifft2(f_ishift) TypeError: slice indices must be integers or None or have an __index__ method

該当のソースコード

import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('200901img/up003_h.tif',0) f = np.fft.fft2(img) fshift = np.fft.fftshift(f) magnitude_spectrum = 20*np.log(np.abs(fshift)) ''' plt.subplot(121),plt.imshow(img, cmap = 'gray') plt.title('Input Image'), plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(magnitude_spectrum, cmap = 'gray') plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([]) plt.show() ''' rows, cols = img.shape crow,ccol = rows/2 , cols/2 print(crow) print(ccol) fshift[crow-30.0:crow+30.0, ccol-30.0:ccol+30.0] = 0.0 f_ishift = np.fft.ifftshift(fshift) img_back = np.fft.ifft2(f_ishift) img_back = np.abs(img_back) ''' plt.subplot(131),plt.imshow(img, cmap = 'gray') plt.title('Input Image'), plt.xticks([]), plt.yticks([]) plt.subplot(132),plt.imshow(img_back, cmap = 'gray') plt.title('Image after HPF'), plt.xticks([]), plt.yticks([]) plt.subplot(133),plt.imshow(img_back) plt.title('Result in JET'), plt.xticks([]), plt.yticks([]) plt.show() '''

試したこと

自分の写真をOpenCVの公式HPのソースコードをそのまま使用して画像処理しようとしたのですが、うまくいきません
fshift[crow-30.0:crow+30.0, ccol-30.0:ccol+30.0] = 0.0の部分がHPでは30、0だったので、.0を付けてみた程度です。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

なぜ.0を付けたのでしょうか。
スライスなので整数でないといけません。

投稿2020/09/03 06:30

jeanbiego

総合スコア3966

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

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

labshirasawa_

2020/09/03 06:34

整数の場合も同様のエラーが表示されるのですがお助け願います。 TypeError Traceback (most recent call last) <ipython-input-25-e70917509682> in <module> 23 print(ccol) 24 ---> 25 fshift[crow-30:crow+30, ccol-30:ccol+30] = 0 26 f_ishift = np.fft.ifftshift(fshift) 27 img_back = np.fft.ifft2(f_ishift) TypeError: slice indices must be integers or None or have an __index__ method
jeanbiego

2020/09/03 06:38

crowとかccolが整数ではないのではないでしょうか。 crow,ccol = rows/2 , cols/2のあと、intに変更してなさそうですし。 crow = int(crow) ccol = int(ccol) みたいなのが必要とは思います(そもそも、rows, colsが奇数ならどうかとかは設計意図によりますが)
labshirasawa_

2020/09/03 06:40

jeambiegoさん回答ありがとうございました。 crow,ccolをが整数型にすることでエラーが表示されなくなりました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問