前提・実現したいこと
Python3(Jupyter Notebook)に入っている1つの画像(今回は"s298_1(3).jpg")を100×100ピクセル等分に切り抜いて保存したいです。
※先ほどのインデントの問題は解決しましたが、また新たな問題が発生したので編集させていただきました。
※何度も編集してすみません。
発生している問題・エラーメッセージ
None ------------------------------------------------------------------------------ TypeError Traceback (most recent call last) <ipython-input-10-140e2b678da4> in <module> 6 7 # 画像の [100:200, 100:300] の範囲を切り抜く。 ----> 8 clipped = img[100:200, 100:300] TypeError: 'NoneType' object is not subscriptable AttributeError Traceback (most recent call last) <ipython-input-11-22c40eb2a96f> in <module> 1 import os 2 ----> 3 class ImgInfo: 4 def __init__(self, name, sx, sy, ex, ey): 5 self.name = name + '.png' <ipython-input-11-22c40eb2a96f> in ImgInfo() 20 21 # 画像を開く ---> 22 img = img.open("s298_1(3).jpg") 23 # 画像を切り出す 24 imgCrop = img.crop((始点X, 始点Y, 終点X, 終点Y)) AttributeError: 'NoneType' object has no attribute 'open'
imgファイルには該当するものが「ない」といわれました。
対象画像は「エクスプローラー」の「ピクチャ」で「jpgファイル」として保存し、それを「img」ファイルに移動させました。
また、'NoneType'といわれ、このバージョンでは通用しない関数文だったようです。
この場合、どのように直すのが正解なのでしょう。
該当のソースコード
import cv2 #画像の読み込み img=cv2.imread("s298_1(3).jpg") print(img) class ImgInfo: def __init__(self, name, sx, sy, ex, ey): self.name = name + '.png' self.sx = sx self.sy = sy self.ex = ex self.ey = ey def carving(self): # 画像を切り出して保存 baseFile = imgDir + imgName img = Image.open(baseFile) imgCrop = img.crop((self.sx, self.sy, self.ex, self.ey)) output = imgDir + self.name imgCrop.save(output) def show(self): # 情報表示 print('[{}] {: >100}, {: >100}, {: >100}, {: >100}'.format(self.name, self.sx, self.sy, self.ex, self.ey)) # 画像を開く img = Image.open("開くファイル(=s298_1(3).jpg)") # 画像を切り出す imgCrop = img.crop((始点X, 始点Y, 終点X, 終点Y)) # 切り出した画像を保存 imgCrop.save("保存するパス(=Python)") def getOfsList(num, size): ofs = [] for i in range(0,num) ofs.append(i * size) return ofs # イメージの始点 startX = 5 startY = 5 # イメージの幅、高さ imgW = 120 imgH = 120 xofs = getOfsList(100, imgW) yofs = getOfsList(100, imgH) cnt = 0 ycnt = 1 for y in yofs: xcnt = 1 for x in xofs: name = str(cnt).zfill(2) sx = x + startX sy = y + startY ex = (imgW * xcnt) + startX ey = (imgH * ycnt) + startY cnt += 1 xcnt += 1 ycnt += 1 for img in imgs: img.carving()
試したこと
from PIL import Image img = Image.open('s298_1(3).jpg') cropped_img = img.crop(box=(0, 0, 500, 500)) cropped_img.save('s298_1(01).jpg')
それでも同じ結果になりました。
補足情報(FW/ツールのバージョンなど)
PC環境
・Windows10
・Python3.7
・OpenCV3.4.2
・Jupyter Notebook(tensorflow16)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/27 08:58
2019/12/27 15:24
2019/12/27 15:31
2019/12/27 16:04
2019/12/27 16:19
2019/12/27 17:12
2019/12/27 17:52 編集
2019/12/27 18:18
2019/12/27 22:14