123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- from copy import deepcopy
- import glog
- import os, cv2, json
- import numpy as np
- def traverse_folder(folder_path, file_list, end=".jpg", all_floder = False):
- for item in os.listdir(folder_path):
- item_path = os.path.join(folder_path, item)
- if os.path.isfile(item_path):
- if item_path.endswith(".jpg") or item_path.endswith(".png"):
- file_list.append(item_path)
- elif os.path.isdir(item_path):
- if all_floder is True:
- traverse_folder(item_path, file_list)
- def mergeNewImage(img0, etc0, img1, etc1, img2, etc2, img3, etc3):
- img = np.zeros((960, 1280, 3), dtype=np.uint8)
- img[0: 480, 0: 640, 0:3] = img0
- img[0: 480, 640: 1280, :] = img1
- img[480: 960, 0: 640, :] = img2
- img[480: 960, 640: 1280, :] = img3
- if not etc1 is None:
- for point in etc1["points"]:
- point[0] = point[0] + 640
- if not etc2 is None:
- for point in etc2["points"]:
- point[1] = point[1] + 480
- if not etc3 is None:
- for point in etc3["points"]:
- point[0] = point[0] + 640
- point[1] = point[1] + 480
- return img, etc0, etc1, etc2, etc3
- def convertImg(file, output_path):
- etc = {}
- ext = os.path.splitext(file) # 将文件名路径与后缀名分开
- file_name = ext[0].split("/")[-1]
- save_file = output_path + file_name
- json_file = ext[0] + ".json"
- if os.path.isfile(json_file):
- f = open(json_file, 'r')
- content = f.read()
- etc = json.loads(content)
- else:
- return
- img = cv2.imread(file)
- img_lf = img[0: 480, 0: 640, 0:]
- img_rf = img[0: 480, 640: 1280, :]
- img_lr = img[480: 960, 0: 640, :]
- img_rr = img[480: 960, 640: 1280, :]
- etc_sig_old = [None, None, None, None]
- for points in etc['shapes']:
- index = int(points["points"][0][0] // 640) | int(int(points["points"][0][1] // 480) << 1)
- for point in points["points"]:
- point[0] = point[0] % 640
- point[1] = point[1] % 480
- etc_sig_old[index] = points
- etc['shapes'].clear()
- etc_sig = deepcopy(etc_sig_old)
- etc_sig_last = [None, None, None, None]
- merge_img, etc_sig_last[0], etc_sig_last[1], etc_sig_last[2], etc_sig_last[3] = mergeNewImage(img_rf, etc_sig[1],
- img_lf, etc_sig[0],
- img_lr, etc_sig[2],
- img_rr, etc_sig[3])
- for last_etc in etc_sig_last:
- if not last_etc is None:
- etc['shapes'].append(last_etc)
- etc['imagePath'] = file_name + "_convert_test_a.jpg"
- cv2.imwrite(save_file + "_convert_test_a.jpg", merge_img)
- with open(save_file + "_convert_test_a.json", "w") as w_f:
- json.dump(etc, w_f, indent=4)
- etc['shapes'].clear()
- etc_sig = deepcopy(etc_sig_old)
- etc_sig_last = [None, None, None, None]
- merge_img, etc_sig_last[0], etc_sig_last[1], etc_sig_last[2], etc_sig_last[3] = mergeNewImage(img_lr, etc_sig[2],
- img_rf, etc_sig[1],
- img_lf, etc_sig[0],
- img_rr, etc_sig[3])
- for last_etc in etc_sig_last:
- if not last_etc is None:
- etc['shapes'].append(last_etc)
- etc['imagePath'] = file_name + "_convert_test_b.jpg"
- cv2.imwrite(save_file + "_convert_test_b.jpg", merge_img)
- with open(save_file + "_convert_test_b.json", "w") as w_f:
- json.dump(etc, w_f, indent=4)
- etc['shapes'].clear()
- etc_sig = deepcopy(etc_sig_old)
- etc_sig_last = [None, None, None, None]
- merge_img, etc_sig_last[0], etc_sig_last[1], etc_sig_last[2], etc_sig_last[3] = mergeNewImage(img_rr, etc_sig[3],
- img_rf, etc_sig[1],
- img_lr, etc_sig[2],
- img_lf, etc_sig[0])
- for last_etc in etc_sig_last:
- if not last_etc is None:
- etc['shapes'].append(last_etc)
- etc['imagePath'] = file_name + "_convert_test_c.jpg"
- cv2.imwrite(save_file + "_convert_test_c.jpg", merge_img)
- with open(save_file + "_convert_test_c.json", "w") as w_f:
- json.dump(etc, w_f, indent=4)
- etc['shapes'].clear()
- etc_sig = deepcopy(etc_sig_old)
- etc_sig_last = [None, None, None, None]
- merge_img, etc_sig_last[0], etc_sig_last[1], etc_sig_last[2], etc_sig_last[3] = mergeNewImage(img_lf, etc_sig[0],
- img_lr, etc_sig[2],
- img_rf, etc_sig[1],
- img_rr, etc_sig[3])
- for last_etc in etc_sig_last:
- if not last_etc is None:
- etc['shapes'].append(last_etc)
- etc['imagePath'] = file_name + "_convert_test_d.jpg"
- cv2.imwrite(save_file + "_convert_test_d.jpg", merge_img)
- with open(save_file + "_convert_test_d.json", "w") as w_f:
- json.dump(etc, w_f, indent=4)
- etc['shapes'].clear()
- etc_sig = deepcopy(etc_sig_old)
- etc_sig_last = [None, None, None, None]
- merge_img, etc_sig_last[0], etc_sig_last[1], etc_sig_last[2], etc_sig_last[3] = mergeNewImage(img_lf, etc_sig[0],
- img_rr, etc_sig[3],
- img_lr, etc_sig[2],
- img_rf, etc_sig[1])
- for last_etc in etc_sig_last:
- if not last_etc is None:
- etc['shapes'].append(last_etc)
- etc['imagePath'] = file_name + "_convert_test_e.jpg"
- cv2.imwrite(save_file + "_convert_test_e.jpg", merge_img)
- with open(save_file + "_convert_test_e.json", "w") as w_f:
- json.dump(etc, w_f, indent=4)
- etc['shapes'].clear()
- etc_sig = deepcopy(etc_sig_old)
- etc_sig_last = [None, None, None, None]
- merge_img, etc_sig_last[0], etc_sig_last[1], etc_sig_last[2], etc_sig_last[3] = mergeNewImage(img_lf, etc_sig[0],
- img_rf, etc_sig[1],
- img_rr, etc_sig[3],
- img_lr, etc_sig[2])
- for last_etc in etc_sig_last:
- if not last_etc is None:
- etc['shapes'].append(last_etc)
- etc['imagePath'] = file_name + "_convert_test_f.jpg"
- cv2.imwrite(save_file + "_convert_test_f.jpg", merge_img)
- with open(save_file + "_convert_test_f.json", "w") as w_f:
- json.dump(etc, w_f, indent=4)
- if __name__ == '__main__':
- path = "/home/zx/DataAcquisition-Python/Modules/moreSpecimens/image"
- output_path = path + "/output/"
- if not os.path.exists(output_path):
- os.mkdir(output_path)
- file_list = []
- # 加载配置
- if os.path.isdir(path):
- traverse_folder(path, file_list)
- else:
- print("it's a special file(socket,FIFO,device file)")
- exit(0)
- for file in file_list:
- print(file)
- if file.endswith(".png"):
- mat = cv2.imread(file)
- # os.remove(file)
- ext = os.path.splitext(file)
- file = ext[0] + ".jpg"
- cv2.imwrite(file, mat)
- convertImg(file, output_path)
|