小さな図を大きな図に貼り付ける(検出されたデータの強化)


参照先:https://blog.csdn.net/u011321546/article/details/79565355
1.単一図面テスト:
# -*- coding=GBK -*-
'''
empty classroom pictures
jushou imgs:

'''

import cv2
import numpy as np
from matplotlib import pyplot as plt

# 
def jie_image(src1):
    src2 = src1[5:89, 500:630]# 5 89 500 630 

    cv2.imshow(" ", src2)
    src1[105:189, 300:430] = src2# , 
    cv2.imshow(" ", src1)

def tietu():
    empty = cv2.imread("/data/JUSHOU/align/real_empty_class/imgs/20180509_r_00767.jpg")
    # cv.imshow("empty", empty)
    # img_rgb = cv2.cvtColor(empty, cv2.COLOR_BGR2RGB)
    w, h, c = empty.shape


    handsup = cv2.imread("/data/JUSHOU/align/crop_jushou_generate/yiyang2-image-00170-img_000005.jpg")
    w1,h1,c1=handsup.shape
    k=int(w1/12)
    handsup2=handsup[k:w1-k,k:h1-k,:]
    w2, h2, c2 = handsup2.shape

    x_s=100
    y_e=820
    print(empty.shape)
    empty[y_e-w2:y_e,x_s:x_s+h2]=handsup2
    # empty = cv2.cvtColor(empty, cv2.COLOR_BGR2RGB)
    plt.imshow(empty)
    # plt.xticks([]), plt.yticks([])  # to hide tick values on X and Y axis

    cv2.imwrite('./result_imgs/1.jpg', empty)
    plt.show()



# tietu()

2.大量生成(大図ごとに6枚の小図を貼り、1000枚の生成を終了)し、各図の検出groudtruthを生成する.
import os
import json
def Image_synthesis():
    output = open('./jushou.json', 'w')

    empty_imgs_dir='/data/JUSHOU/align/real_empty_class/imgs'
    jushou_imgs_dir='/data/JUSHOU/align/crop_jushou_generate'
    empty_img_list=open('./emty_imgs_list.txt','w')
    empty_list=[]
    for path,dir,filenames in os.walk(empty_imgs_dir):
        for filename in filenames:
            empty_path=os.path.join(path,filename)
            empty_img_list.write(empty_path+'
') empty_list.append(empty_path) jushou_img_list = open('./jushou_imgs_list.txt', 'w') jushou_list=[] for path, dir, filenames in os.walk(jushou_imgs_dir): for filename in filenames: jushou_path = os.path.join(path, filename) jushou_img_list.write(jushou_path + '
') jushou_list.append(jushou_path) it=iter(empty_list) sub_img=iter(jushou_list) count=0 for i in range(1000): img_gt=[] try: count+=1 print(count) # if count>20: # break # print(next(it)) name1=next(it) print(name1) empty = cv2.imread(name1) h,w,c=empty.shape XS = [0+100,int(w/3+100),int(w*2/3)+100,0+100,int(w/3)+100,int(w*2/3)+100] YE = [int(h/2),int(h/2),int(h/2),h-100,h-100,h-100] for j in range(6): # print('#' * 30) try: name2 = next(sub_img) print(name2) handsup = cv2.imread(name2) except StopIteration: sub_img = iter(jushou_list) handsup = cv2.imread(next(sub_img)) w1, h1, c1 = handsup.shape if w > 2000: handsup = cv2.resize(handsup, (w1 * 2, h1 * 2), interpolation=cv2.INTER_CUBIC) w1, h1, c1 = handsup.shape if h1>400: handsup= cv2.resize(handsup, (int(w1/2), int(h1/2)), interpolation=cv2.INTER_CUBIC) if h1<160: handsup = cv2.resize(handsup, (w1 *2 , h1 * 2), interpolation=cv2.INTER_CUBIC) if w>2000: handsup = cv2.resize(handsup, (w1 * 3, h1 * 3), interpolation=cv2.INTER_CUBIC) w1, h1, c1 = handsup.shape k = int(w1 / 12) handsup2 = handsup[k:w1 - k, k:h1 - k, :] # print(handsup2.shape) w2, h2, c2 = handsup2.shape x_s = XS[j] y_e = YE[j] y1,y2,x1,x2=(y_e - w2,y_e, x_s,x_s + h2) # print(handsup2.shape) # print((y_e - w2, y_e, x_s, x_s + h2)) empty[y_e - w2:y_e, x_s:x_s + h2] = handsup2 img_gt.append( [x1, y1, x2, y2]) instances = [] for gt in img_gt: bbox = gt[:4] cls = 1 instances.append({ 'is_ignored': False, 'bbox': bbox, 'label': cls}) data = { 'filename': 'result_imgs/%d.jpg'%i, 'image_height': h, 'image_width': w, 'instances': instances } if len(instances) == 0: count -= 1 continue output.write(json.dumps(data, ensure_ascii=False) + '
') cv2.imwrite('./result_imgs/%d.jpg'%i, empty) # plt.imshow(empty) # plt.show() except StopIteration: it = iter(empty_list) continue Image_synthesis()