前提・実現したいこと
pythonである画像を分割し,画像ごとのHSV値の大小に条件を設けることでそれぞれの画像の色を変えました.
今は9分割しており,色変更後の9枚の画像を結合,1枚の画像にしたいです.
どなたかご教示お願い致します.
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-16-dcc3b2ab874e> in <module> 96 d.append(pic_show(x) for x in sub_imgs) 97 img_x = np.vstack((np.hstack(d[0:3]), ---> 98 np.hstack(d[3:6]), 99 np.hstack(d[6:9]) 100 )) <__array_function__ internals> in hstack(*args, **kwargs) ~\anaconda3\lib\site-packages\numpy\core\shape_base.py in hstack(tup) 343 return _nx.concatenate(arrs, 0) 344 else: --> 345 return _nx.concatenate(arrs, 1) 346 347 <__array_function__ internals> in concatenate(*args, **kwargs) ValueError: need at least one array to concatenate
該当のソースコード
python
1import cv2 2import matplotlib.pyplot as plt 3import numpy as np 4 5def split_imgs(img, hsplits=3, vsplits=3): #画像分割 6 h, w = img.shape[:2] 7 crop_img = img[: h // vsplits * vsplits, : w // hsplits * hsplits] 8 9 return np.array( 10 [x for h_img in np.vsplit(crop_img, vsplits) for x in np.hsplit(h_img, hsplits)] 11 ) 12 13def pic_show(img): #分割画像を色変更し表示する 14 hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 15 # チャンネルごとに分解 16 h, s, v = cv2.split(hsv) 17 mean1 = h.mean() 18 mean2 = s.mean() 19 mean3 = v.mean() 20 21 img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 22 img_array = np.asarray(img) 23 24 if 95 < mean1 < 100: 25 img_array[:,:, (1)]=50 26 elif 100 < mean1 < 105: 27 img_array[:,:, (1)]=100 28 elif 105 < mean1 < 110: 29 img_array[:,:, (1)]=150 30 elif 110 < mean1 < 115: 31 img_array[:,:, (1)]=200 32 elif 115 < mean1 < 120: 33 img_array[:,:, (1)]=250 34 35 plt.imshow(img_array) 36 plt.show() 37 38# 画像を読み込む。 39hsplits = 3 # 横方向の分割数 40vsplits = 3 # 縦方向の分割数 41img = cv2.imread("test.jpg") 42 43# 画像を分割する。 44sub_imgs = split_imgs(img, hsplits, vsplits) 45print(sub_imgs.shape) 46 47d = [] 48d.append(pic_show(x) for x in sub_imgs) 49img_x = np.vstack((np.hstack(d[0:3]), 50 np.hstack(d[3:6]), 51 np.hstack(d[6:9]) 52 )) 53 54cv.imshow(img_x)
試したこと
空のリストを準備して,その中にそれぞれの画像のnp.asarrayを縦横で大きさを指定しながら追加していくことで,
元の画像のように結合できるのでは,と思ったのですが思うように出来ませんでした
補足情報(FW/ツールのバージョンなど)
python 3.7.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/17 12:38 編集
2020/10/19 11:57 編集
2020/10/19 11:54