Я пишу код для автоматического исправления вариантов выбора пузырьковых листов 4. Я хочу построить bbox вокруг затемненных прямоугольников (выбранных студентами для вопроса) теперь я использую cv2.findContours и imutils.grab_contours, а затем four_point_transform, чтобы получить самый большой прямоугольник в моем пузырьковом листе (это специальный пузырьковый лист, который я создал себя. Большой прямоугольник вокруг кругов поможет нам легче получать круги) все выглядит хорошо. но я хочу сохранить изображения после обнаружения и построения полей вокруг ответов на каждый отдельный вопрос. я могу рисовать круги в трансформированном изображении, но как я могу рисовать круги в исходном изображении?


Я думаю, мне следует использовать обратную матрицу преобразования и получить bbox в исходном изображении. но я не знаю возможно это или нет и как это сделать, если да.
это мой код, если необходимо:
def find_answer(dst,): Gray_dst = cv2.cvtColor(dst,cv2.COLOR_BGR2GRAY) Blured_dst = cv2.GaussianBlur(gray_dst,(3,3),0) Edged_dst = cv2.Canny(blurred_dst,75,200) black_threshold = np.sum(gray_dst[0:37,0:37])/(37*37) cnts = cv2.findContours(edged_dst,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) cnts = imutils.grab_contours(cnts) документ = Нет если len(cnts): cnts = sorted(cnts,key=cv2.contourArea,reverse=True) для c в центах: пери = cv2.arcLength(c,True) приблизительно = cv2.approxPolyDP(c,0,02*peri,True) если(len(приблизительно))==4: документ = приблизительно перерыв бумага = four_point_transform(dst,docCnt.reshape(4,2)) деформированный = four_point_transform(gray_dst,docCnt.reshape(4,2)) thresh = cv2.threshold(warped,0,255,cv2.THRESH_BINARY_INV|cv2.THRESH_OTSU)[1] cnts = cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) cnts = imutils.grab_contours(cnts) cnts = sorted(cnts,key=cv2.contourArea,reverse=True) ответы = {} P=Истина для i в диапазоне (len(q)): ш = q[0][2] ч = q[0][3] площадь = ш*ч ли = [] для j в диапазоне (len(q)): площадь = q[j][2]*q[j][3] y1 = q[j][0] x1 = q[j][1] y2 = q[j][0] + q[j][2] x2 = q[j][1] +q[i][j][3] sum = np.sum(искажённый[x1:x2,y1:y2]) #print(сумма) #print(ш,ч) если сумма/площадь