import cv2
import numpy as np
import os
import numpy as np
from numpy import array`在这里插入代码片`
import json
import os
from PIL import Image
def img_paste(img_path, polygon_dict, save_name=False):
"""
:param img_path:
:param polygon_dict:
:param save_name:
:return:
"""
if __name__ == '__main__':
data_path = r'F:/sef/arrow/OutputJson'
output_path = r'F:/dataset/extracted_imgs'
info_all = {}
arrow_dict_json = {
'imgs':"0",
'path':'1',
'objects':'2',
'confidence':'3',
'points':'4',
'category':5,
}
count = 1
count_img_noexist = 0
count_img_exist = 0
json_str = json.dumps(arrow_dict_json)
print(json_str)
print(type(json_str))
with open('pengjunlee.json', 'w', encoding='utf-8') as f:
json.dump(json_str, f, ensure_ascii=False, indent=4)
for root, dirs, files in os.walk(data_path, topdown=False):
for name in files:
if name.endswith('json'):
print(os.path.join(root, name))
arrow_dict = {
0:0,
1:'a_wf',
2: 'a_wfl',
3: 'a_wl',
4:'a_wr',
5:'a+wfr',
6:'a_W_lc',
7:'a_w_ls',
}
count = 1
count_img_noexist = 0
count_img_exist = 0
bgr_img_path = cv2.imread(r"F:/sef/arrow/Images/+.jpg",0)
image, contours, hier = cv2.findContours(thresh,
cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
x,y,w,h = cv2.boundingRect(contour)
cv2.rectangle(img, (x,y), (x+w, y+h),(0,0,255),2)
rect = cv2.minAreaRect(contour)
box = cv2.boxPoints(rect)
box = np.int0(box)
cv2.drawContours(img, [box], 0, (255,0,255), 2)
(x0,y0), radius = cv2.minEnclosingCircle(contour)
center = (int(x0), int(y0))
radius = int(radius)
img = cv2.circle(img, center, radius, (0,255,255))
def coordinate_extract(img_path, coordinate_list):
"""
"""
coord_x = []
coord_y = []
for i in range(len(coordinate_list)):
if i % 2 == 0:
coord_x.append(coordinate_list[i])
else:
coord_y.append(coordinate_list[i])
return min(coord_x), min(coord_y), max(coord_x), max(coord_y)
def bbox(bounding_boxes,contours,):
object_dict = {}
for bbox in bounding_boxes:
[x,y,w,h] = bbox
x,y,w,h = cv2.boundingRect(bgr_img_path)
for bbox in bounding_boxes:
[x, y, w, h] = bbox
cv2.rectangle(bgr_img_path, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.rectangle(bgr_img_path, (x, y), (x + w, y + h), (153, 153, 0), 5)
new_image = bgr_img_path[y-2:y+h+2, x-2:x + w + 2]
bounding_boxes = [cv2.boundingRect(cnt) for cnt in contours]
with open(arrow_dict, 'r') as f:
org_data = [i.strip().split(';') for i in f.readlines()]
arrow_dict['path'] = data_path
objects_list = []
for idx, org_target in enumerate(org_data):
object_dict = {}
coordinates = coordinate_extract(img_path, org_target[1:-2])
object_dict['coordinate'] = {
'xmin': coordinates[0],
'ymin': coordinates[1],
'xmax': coordinates[2],
'ymax': coordinates[3]
}
imgs_dir = os.path.join(output_path, str(object_dict['category']))
if not os.path.exists(imgs_dir):
os.mkdir(imgs_dir)
print(img_path)
org_img = Image.open(img_path)
extracted_img = org_img.crop(
(int(coordinates[0]), int(coordinates[1]), int(coordinates[2]), int(coordinates[3])))
extracted_img.save(
os.path.join(imgs_dir,
'%s_%d_%s.jpg' % (name.split('.')[0], idx + 1, object_dict['cls'])))
with open('annotations.json', 'w') as f:
json.dump(info_all, f)
在这里插入代码片