実現したいこと
分割した画像に対して各々、輪郭抽出を行い、抽出した輪郭に対して外接矩形を行うプログラムがあります。
分割処理 ⇒ 輪郭抽出 ⇒ 外接矩形の描画
の処理を行った後に、外接矩形が描画された状態のまま再び連結するプログラムを作りたいです。
cv2.hconca
tやcv2.vconcat
を使用すればできそう、、というところまではわかるのですが、
実装がうまくいきません、、
どなたかおしえていただけないでしょうか?
元々の画像サイズ:3024×4032
分割サイズ:200×200
分割数:300枚
該当のソースコード
↓連結の関数
Python
1def concat_tile(im_list_2d): 2 return cv2.vconcat([cv2.hconcat(im_list_h) for im_list_h in im_list_2d])
↓輪郭抽出⇒外接矩形の関数
Python
1import cv2 2import numpy as np 3 4def DrawCont(img): 5 # グレースケールに変換 6 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 7 8 # 二値化 9 ret, binary = cv2.threshold(gray, 47, 255, cv2.THRESH_BINARY_INV) 10 11 #輪郭抽出 12 _, contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 13 14 # 面積が小さい輪郭削除 15 area = img.shape[0] * img.shape[1] 16 contours = list(filter(lambda cnt: 1 < cv2.contourArea(cnt), contours)) 17 18 # 外接矩形に変換 19 rects = [cv2.boxPoints(cv2.minAreaRect(cnt)).astype(int) for cnt in contours] 20 21 # 外接矩形を描画 22 cv2.drawContours(img, rects, -1, (0, 255, 0), 2) 23 24 # 画像を保存 25 #cv2.imwrite('C:/Users/ito/Anaconda3/envs/pic/split/result' + str(i) + '.jpg', img)
↓分割処理のコード
Python
1import cv2 2import numpy as np 3 4 5img = cv2.imread('C:/Users/ito/Anaconda3/envs/Sample/pic/testimg/IMG_0704.jpg') 6#img = cv2.resize(img, (1275, 997)) 7 8size = 252 9v_size = img.shape[0] // size * size 10h_size = img.shape[1] // size * size 11img = img[:v_size, :h_size] 12 13v_split = img.shape[0] // size 14h_split = img.shape[1] // size 15out_img = [] 16 17[out_img.extend(np.hsplit(h_img, h_split)) for h_img in np.vsplit(img, v_split)] 18 19out_img = np.array(out_img) 20 21i=0 22for i, lst in enumerate(out_img): 23 #print(type(lst), lst) 24 25 #関数DrawContの呼び出し(輪郭抽出→外接矩形の描画) 26 DrawCont(out_img[i]) 27 28 #分割処理後に外接矩形描画した画像を保存 29 cv2.imwrite('C:/Users/ito/Anaconda3/envs/Sample/pic/split/I0704/split' + str(i) +'.png', out_img[i]) 30 31 #画像を連結②(hconcat,vconcatを利用) 32 33for i in range(0, 191): 34 print('file name/split{}.png'.format(i)) 35 src = cv2.imread('C:/Users/ito/Anaconda3/envs/Sample/pic/split/I0704/split{i}.png') 36 37 38 cv2.imwrite('C:/Users/ito/Anaconda3/envs/Sample/pic/concat/cct0704.png', cct) 39
開発環境
windows7 professional
python3.6.5
opencv3.3.1
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。