import cv2 import time import os import numpy as np import json vehicles = ["ambulance", "car1"] sides = [str(x) for x in range(0,361,30)] distances =["close_high","far_high","close_low","far_low"] def select_rect(im): rects=[] scale_percent = 100 width = int(im.shape[1] * scale_percent / 100) height = int(im.shape[0] * scale_percent / 100) # Select ROI fromCenter = False r = cv2.selectROI(cv2.resize(im,(width,height))) # Crop image if(r == (0,0,0,0)): cv2.destroyAllWindows() imCrop = im[int(r[1]*100/scale_percent):int(r[1]*100/scale_percent+r[3]*100/scale_percent), int(r[0]*100/scale_percent):int(r[0]*100/scale_percent+r[2]*100/scale_percent)] # Display cropped image cv2.imshow("Image", imCrop) cv2.waitKey(0) cv2.destroyAllWindows() for i in r: rects.append(int(i)*int(100/scale_percent)) print(rects) locs = { "x1": rects[0], "y1": rects[1], "x2": rects[0]+rects[2], "y2": rects[1]+rects[3], } return locs def take_image(): cam_no = 0 while 1: cam = cv2.VideoCapture(cam_no) if not (cam is None or not cam.isOpened()): break cam_no+=1 for vehicle in vehicles: if vehicle == "ambulance": continue if not os.path.exists(vehicle): os.makedirs(vehicle) for distance in distances: for side in sides: for i in range(1,3): ret,img= cam.read() cv2.imwrite("{}/{}-{}({}).jpg".format(vehicle,distance,side,i),img) cv2.imshow("current",img) ex_c = [27, ord("q"), ord("Q")] if cv2.waitKey(1) & 0xFF in ex_c: break print("Took side {}:distance:{}, waiting 7 seconds".format(side,distance)) time.sleep(7) print("Finished distance:"+distance) while not cv2.waitKey(1) & 0xFF in ex_c: ret,img= cam.read() cv2.imshow("current",img) print("Finished vehicle:"+vehicle) while not cv2.waitKey(1) & 0xFF in ex_c: ret,img= cam.read() cv2.imshow("current",img) def cut_image(): cut_rects = {} for vehicle in vehicles: if not os.path.exists(vehicle): os.makedirs(vehicle) for distance in distances: for side in sides: img = cv2.imread("{}/{}-{}({}).jpg".format(vehicle,distance,side,1)) cut_rects[vehicle + "-" + distance + "-" + side] = select_rect(img) cv2.destroyAllWindows() return cut_rects coordinates = cut_image() print(json.dumps(coordinates,indent=2)) with open("coordinates.json","w") as file: file.write(json.dumps(coordinates,indent=2))