Python3.9で任意の画像を読み込んで、その画像を任意でトリミングしたものと中心部からトリミングしたものをそれぞれ表示するプログラムを作成したいです。
しかし、以下の2つのことが解決できません。
1つ目は、任意でトリミング後の画像は生成できたのですが表示できません。
2つ目は、中心部からのトリミング画像が生成できません。
OSはWindowsです。
以下、コードです。
import cv2 from PIL import Image, ImageFilter import numpy as np import matplotlib.pyplot as plt def crop_center(pil_img, crop_width, crop_height): #画像の中心部を切り出す関数 img_width, img_height = pil_img.size return pil_img.crop(((img_width - crop_width) // 2, (img_height - crop_height) // 2, (img_width + crop_width) // 2, (img_height + crop_height) // 2)) img = cv2.imread("hukei.jpg") # 画像読み込み im_list = np.asarray(img) #画像をarrayに変換 plt.imshow(im_list) #貼り付け plt.show() #表示 # 画像のトリミング img_after = img[50 : 150, 100: 250] cv2.imwrite("hukei_after.jpg", img_after) # ---end--- img1 = cv2.imread("hukei_after") # 処理後の画像読み込み im_list1 = np.asarray(img1) #画像をarrayに変換 plt.imshow(im_list1) #貼り付け plt.show() #表示 # 画像の中心を切り出し im_crop = crop_center(img1,100,100) im_crop.save('center_hukei', quality=95) # ---end--- img2 = cv2.imread("center_hukei") #処理後の画像読み込み im_list2 = np.asarray(img2) #画像をarrayに変換 plt.imshow(im_list2) #貼り付け plt.show() #表示
以下、エラー文です。
Traceback (most recent call last): File "C:\Python 3.9\semi\trim.py", line 28, in <module> plt.imshow(im_list1) #貼り付け File "C:\Users????\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\pyplot.py", line 2724, in imshow __ret = gca().imshow( File "C:\Users????\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\__init__.py", line 1447, in inner return func(ax, *map(sanitize_sequence, args), **kwargs) File "C:\Users????\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\axes\_axes.py", line 5523, in imshow im.set_data(X) File "C:\Users????\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\image.py", line 702, in set_data raise TypeError("Image data of dtype {} cannot be converted to " TypeError: Image data of dtype object cannot be converted to float
> 表示できません。
ファイルが読めてないから
cv2.imread("hukei_after")
のファイル名を"hukei_after.jpg"に変える
> 生成できません。
cv2.imread(...で読み込んだデータをPILで処理するためには、事前に変換する必要があります
https://qiita.com/k_eita/items/28a6a502ea1727d81624
下記どちらも、ファイル名に拡張子(.jpgとか)が要ります
im_crop.save('center_hukei'...
cv2.imread("center_hukei")
あなたの回答
tips
プレビュー