Python cv2.getPerspectiveTransform() Examples
The following are 30
code examples of cv2.getPerspectiveTransform().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
cv2
, or try the search function
.
Example #1
Source File: augmentation.py From face_landmark with Apache License 2.0 | 8 votes |
def Perspective_aug(src,strength,label=None): image = src pts_base = np.float32([[0, 0], [300, 0], [0, 300], [300, 300]]) pts1=np.random.rand(4, 2)*random.uniform(-strength,strength)+pts_base pts1=pts1.astype(np.float32) #pts1 =np.float32([[56, 65], [368, 52], [28, 387], [389, 398]]) M = cv2.getPerspectiveTransform(pts1, pts_base) trans_img = cv2.warpPerspective(image, M, (src.shape[1], src.shape[0])) label_rotated=None if label is not None: label=label.T full_label = np.row_stack((label, np.ones(shape=(1, label.shape[1])))) label_rotated = np.dot(M, full_label) label_rotated=label_rotated.astype(np.int32) label_rotated=label_rotated.T return trans_img,label_rotated
Example #2
Source File: align.py From EasyPR-python with Apache License 2.0 | 6 votes |
def align(image, points): """ :param image: :param points: :return: aligned image """ # alignment origin_point = np.require(np.array(points).reshape((4, 2)), dtype=np.single) height = int(max(np.linalg.norm(origin_point[0] - origin_point[1]), np.linalg.norm(origin_point[2] - origin_point[3]))) width = int(max(np.linalg.norm(origin_point[0] - origin_point[3]), np.linalg.norm(origin_point[1] - origin_point[2]))) target_point = np.float32([[0, 0], [0, height], [width, height], [width, 0]]) map_matrix = cv2.getPerspectiveTransform(origin_point, target_point) cols = width + 1 rows = height + 1 color = cv2.warpPerspective(image, map_matrix, (cols, rows)) return color
Example #3
Source File: functional.py From dsb2018_topcoders with MIT License | 6 votes |
def shift_scale_rotate(img, angle, scale, dx, dy): height, width = img.shape[:2] cc = math.cos(angle/180*math.pi) * scale ss = math.sin(angle/180*math.pi) * scale rotate_matrix = np.array([[cc, -ss], [ss, cc]]) box0 = np.array([[0, 0], [width, 0], [width, height], [0, height], ]) box1 = box0 - np.array([width/2, height/2]) box1 = np.dot(box1, rotate_matrix.T) + np.array([width/2+dx*width, height/2+dy*height]) box0 = box0.astype(np.float32) box1 = box1.astype(np.float32) mat = cv2.getPerspectiveTransform(box0, box1) img = cv2.warpPerspective(img, mat, (width, height), flags=cv2.INTER_LINEAR, borderMode=cv2.BORDER_REFLECT_101) return img
Example #4
Source File: functional.py From dsb2018_topcoders with MIT License | 6 votes |
def shift_scale_rotate(img, angle, scale, dx, dy): height, width = img.shape[:2] cc = math.cos(angle/180*math.pi) * scale ss = math.sin(angle/180*math.pi) * scale rotate_matrix = np.array([[cc, -ss], [ss, cc]]) box0 = np.array([[0, 0], [width, 0], [width, height], [0, height], ]) box1 = box0 - np.array([width/2, height/2]) box1 = np.dot(box1, rotate_matrix.T) + np.array([width/2+dx*width, height/2+dy*height]) box0 = box0.astype(np.float32) box1 = box1.astype(np.float32) mat = cv2.getPerspectiveTransform(box0, box1) img = cv2.warpPerspective(img, mat, (width, height), flags=cv2.INTER_LINEAR, borderMode=cv2.BORDER_REFLECT_101) return img
Example #5
Source File: unet_transforms.py From pytorch-saltnet with MIT License | 6 votes |
def do_horizontal_shear(image, mask, scale=0): height, width = image.shape[:2] dx = int(scale * width) box0 = np.array([[0, 0], [width, 0], [width, height], [0, height], ], np.float32) box1 = np.array([[+dx, 0], [width + dx, 0], [width - dx, height], [-dx, height], ], np.float32) box0 = box0.astype(np.float32) box1 = box1.astype(np.float32) mat = cv2.getPerspectiveTransform(box0, box1) image = cv2.warpPerspective(image, mat, (width, height), flags=cv2.INTER_LINEAR, borderMode=cv2.BORDER_REFLECT_101, borderValue=(0, 0, 0,)) mask = cv2.warpPerspective(mask, mat, (width, height), flags=cv2.INTER_NEAREST, borderMode=cv2.BORDER_REFLECT_101, borderValue=(0, 0, 0,)) # mask = (mask > 0.5).astype(np.float32) return image, mask
Example #6
Source File: unet_transforms.py From pytorch-saltnet with MIT License | 6 votes |
def do_rotation_transform(image, mask, angle=0): height, width = image.shape[:2] cc = np.cos(angle / 180 * np.pi) ss = np.sin(angle / 180 * np.pi) rotate_matrix = np.array([[cc, -ss], [ss, cc]]) box0 = np.array([[0, 0], [width, 0], [width, height], [0, height], ], np.float32) box1 = box0 - np.array([width / 2, height / 2]) box1 = np.dot(box1, rotate_matrix.T) + np.array([width / 2, height / 2]) box0 = box0.astype(np.float32) box1 = box1.astype(np.float32) mat = cv2.getPerspectiveTransform(box0, box1) image = cv2.warpPerspective(image, mat, (width, height), flags=cv2.INTER_LINEAR, borderMode=cv2.BORDER_REFLECT_101, borderValue=(0, 0, 0,)) mask = cv2.warpPerspective(mask, mat, (width, height), flags=cv2.INTER_NEAREST, borderMode=cv2.BORDER_REFLECT_101, borderValue=(0, 0, 0,)) # mask = (mask > 0.5).astype(np.float32) return image, mask
Example #7
Source File: functional.py From dsb2018_topcoders with MIT License | 6 votes |
def shift_scale_rotate(img, angle, scale, dx, dy): height, width = img.shape[:2] cc = math.cos(angle/180*math.pi) * scale ss = math.sin(angle/180*math.pi) * scale rotate_matrix = np.array([[cc, -ss], [ss, cc]]) box0 = np.array([[0, 0], [width, 0], [width, height], [0, height], ]) box1 = box0 - np.array([width/2, height/2]) box1 = np.dot(box1, rotate_matrix.T) + np.array([width/2+dx*width, height/2+dy*height]) box0 = box0.astype(np.float32) box1 = box1.astype(np.float32) mat = cv2.getPerspectiveTransform(box0, box1) img = cv2.warpPerspective(img, mat, (width, height), flags=cv2.INTER_LINEAR, borderMode=cv2.BORDER_REFLECT_101) return img
Example #8
Source File: .demo.py From dual-fisheye-video-stitching with MIT License | 6 votes |
def pivot_stitch(img, wd): # Stitch the area in between D = stitch(img[:, 1280 - wd:1280], img[:, 1280:1280 + wd], sigma=15.0) # Warp backwards pt1 = np.dot(D['H'], [wd, 400, 1]) pt3 = np.dot(D['H'], [wd, 800, 1]) pt1 = pt1 / pt1[2] pt3 = pt3 / pt3[2] src = np.zeros((4, 2), np.float32) dst = np.zeros((4, 2), np.float32) src[0] = [0, 0] src[1] = pt1[:2] src[2] = [0, 1280] src[3] = pt3[:2] dst = np.array(src) dst[1] = [2 * wd - 1, 400] dst[3] = [2 * wd - 1, 800] result = np.copy(img) M = cv2.getPerspectiveTransform(src, dst) result[:, 1280 - wd:1280 + wd] = cv2.warpPerspective(D['res'], M, (2 * wd, 1280)) result[:, 1280 - wd:1280 + wd] = D['res'] return result
Example #9
Source File: augmentation.py From faceboxes-tensorflow with Apache License 2.0 | 6 votes |
def Perspective_aug(src,strength,label=None): image = src pts_base = np.float32([[0, 0], [300, 0], [0, 300], [300, 300]]) pts1=np.random.rand(4, 2)*random.uniform(-strength,strength)+pts_base pts1=pts1.astype(np.float32) #pts1 =np.float32([[56, 65], [368, 52], [28, 387], [389, 398]]) M = cv2.getPerspectiveTransform(pts1, pts_base) trans_img = cv2.warpPerspective(image, M, (src.shape[1], src.shape[0])) label_rotated=None if label is not None: label=label.T full_label = np.row_stack((label, np.ones(shape=(1, label.shape[1])))) label_rotated = np.dot(M, full_label) label_rotated=label_rotated.astype(np.int32) label_rotated=label_rotated.T return trans_img,label_rotated
Example #10
Source File: augmentation.py From PINTO_model_zoo with MIT License | 6 votes |
def Perspective_aug(src,strength,label=None): image = src pts_base = np.float32([[0, 0], [300, 0], [0, 300], [300, 300]]) pts1=np.random.rand(4, 2)*random.uniform(-strength,strength)+pts_base pts1=pts1.astype(np.float32) #pts1 =np.float32([[56, 65], [368, 52], [28, 387], [389, 398]]) M = cv2.getPerspectiveTransform(pts1, pts_base) trans_img = cv2.warpPerspective(image, M, (src.shape[1], src.shape[0])) label_rotated=None if label is not None: label=label.T full_label = np.row_stack((label, np.ones(shape=(1, label.shape[1])))) label_rotated = np.dot(M, full_label) label_rotated=label_rotated.astype(np.int32) label_rotated=label_rotated.T return trans_img,label_rotated
Example #11
Source File: dense_transform.py From SpaceNet_Off_Nadir_Solutions with Apache License 2.0 | 6 votes |
def shift_scale_rotate(img, angle, scale, dx, dy, borderMode=cv2.BORDER_CONSTANT): height, width = img.shape[:2] cc = math.cos(angle / 180 * math.pi) * scale ss = math.sin(angle / 180 * math.pi) * scale rotate_matrix = np.array([[cc, -ss], [ss, cc]]) box0 = np.array([[0, 0], [width, 0], [width, height], [0, height], ]) box1 = box0 - np.array([width / 2, height / 2]) box1 = np.dot(box1, rotate_matrix.T) + np.array([width / 2 + dx * width, height / 2 + dy * height]) box0 = box0.astype(np.float32) box1 = box1.astype(np.float32) mat = cv2.getPerspectiveTransform(box0, box1) img = cv2.warpPerspective(img, mat, (width, height), flags=cv2.INTER_NEAREST, borderMode=borderMode) return img
Example #12
Source File: SudokuExtractor.py From SolveSudoku with MIT License | 6 votes |
def crop_and_warp(img, crop_rect): """Crops and warps a rectangular section from an image into a square of similar size.""" # Rectangle described by top left, top right, bottom right and bottom left points top_left, top_right, bottom_right, bottom_left = crop_rect[0], crop_rect[1], crop_rect[2], crop_rect[3] # Explicitly set the data type to float32 or `getPerspectiveTransform` will throw an error src = np.array([top_left, top_right, bottom_right, bottom_left], dtype='float32') # Get the longest side in the rectangle side = max([ distance_between(bottom_right, top_right), distance_between(top_left, bottom_left), distance_between(bottom_right, bottom_left), distance_between(top_left, top_right) ]) # Describe a square with side of the calculated length, this is the new perspective we want to warp to dst = np.array([[0, 0], [side - 1, 0], [side - 1, side - 1], [0, side - 1]], dtype='float32') # Gets the transformation matrix for skewing the image to fit a square by comparing the 4 before and after points m = cv2.getPerspectiveTransform(src, dst) # Performs the transformation on the original image return cv2.warpPerspective(img, m, (int(side), int(side)))
Example #13
Source File: fake_util.py From CRAFT_keras with Apache License 2.0 | 6 votes |
def crop_image(src, points, dst_height=None): """ Crop heat map with points. :param src: 8-bit single-channel image (map). :param points: [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]. :return: dst_heat_map: Cropped image. 8-bit single-channel image (map) of heat map. src_points: [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]. dst_points: [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]. """ src_image = src.copy() src_points = np.float32(points) width = round((cal_distance(points[0], points[1]) + cal_distance(points[2], points[3])) / 2) height = round((cal_distance(points[1], points[2]) + cal_distance(points[3], points[0])) / 2) if dst_height is not None: ratio = dst_height / min(width, height) width = int(width * ratio) height = int(height * ratio) crop_points = np.float32([[0, 0], [width, 0], [width, height], [0, height]]) perspective_mat = cv2.getPerspectiveTransform(src=src_points, dst=crop_points) dst_heat_map = cv2.warpPerspective(src_image, perspective_mat, (width, height), borderValue=0, borderMode=cv2.BORDER_CONSTANT) return dst_heat_map, src_points, crop_points
Example #14
Source File: fake_util.py From CRAFT_keras with Apache License 2.0 | 6 votes |
def un_warping(box, src_points, crop_points): """ Unwarp the character bounding boxes. :param box: The character bounding box. :param src_points: Points before crop. :param crop_points: Points after crop. :return: The character bounding boxes after unwarp. """ perspective_mat = cv2.getPerspectiveTransform(src=crop_points, dst=src_points) new_box = list() for x, y in box: new_x = int((perspective_mat[0][0] * x + perspective_mat[0][1] * y + perspective_mat[0][2]) / (perspective_mat[2][0] * x + perspective_mat[2][1] * y + perspective_mat[2][2])) new_y = int((perspective_mat[1][0] * x + perspective_mat[1][1] * y + perspective_mat[1][2]) / (perspective_mat[2][0] * x + perspective_mat[2][1] * y + perspective_mat[2][2])) new_box.append([new_x, new_y]) return new_box
Example #15
Source File: gaussian.py From CRAFT_keras with Apache License 2.0 | 6 votes |
def perspective_transform(src, dst_shape, dst_points): """ Perspective Transform :param src: Image to transform. :param dst_shape: Tuple of 2 intergers(rows and columns). :param dst_points: [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]. :return: Image after perspective transform. """ img = src.copy() h, w = img.shape[:2] src_points = np.float32([[0, 0], [w, 0], [w, h], [0, h]]) dst_points = np.float32(dst_points) perspective_mat = cv2.getPerspectiveTransform(src=src_points, dst=dst_points) dst = cv2.warpPerspective(img, perspective_mat, (dst_shape[1], dst_shape[0]), borderValue=0, borderMode=cv2.BORDER_CONSTANT) return dst
Example #16
Source File: omr.py From omr with MIT License | 6 votes |
def perspective_transform(img, points): """Applies a 4-point perspective transformation in `img` so that `points` are the new corners.""" source = np.array( points, dtype="float32") dest = np.array([ [TRANSF_SIZE, TRANSF_SIZE], [0, TRANSF_SIZE], [0, 0], [TRANSF_SIZE, 0]], dtype="float32") transf = cv2.getPerspectiveTransform(source, dest) warped = cv2.warpPerspective(img, transf, (TRANSF_SIZE, TRANSF_SIZE)) return warped
Example #17
Source File: cBuckley.py From facial_expressions with Apache License 2.0 | 6 votes |
def per_trans(img,cols,rows,img_path_mod): #3 rotational transformations #transformation 1 pts7 = np.float32([[2,3],[93,4],[5,90],[92,91]]) pts8 = np.float32([[0,0],[96,0],[0,96],[96,96]]) M8 = cv2.getPerspectiveTransform(pts7,pts8) dst8 = cv2.warpPerspective(img,M8,(96,96)) cv2.imwrite(img_path_mod + '_pt1.jpg',dst8) #transformation 2 pts9 = np.float32([[6,7],[89,8],[9,87],[85,88]]) pts10 = np.float32([[0,0],[96,0],[0,96],[96,96]]) M9 = cv2.getPerspectiveTransform(pts9,pts10) dst9 = cv2.warpPerspective(img,M9,(96,96)) cv2.imwrite(img_path_mod + '_pt2.jpg',dst9) #transformation 3 pts11 = np.float32([[10,11],[93,12],[13,82],[83,84]]) pts12 = np.float32([[0,0],[96,0],[0,96],[96,96]]) M10 = cv2.getPerspectiveTransform(pts11,pts12) dst10 = cv2.warpPerspective(img,M10,(96,96)) cv2.imwrite(img_path_mod + '_pt3.jpg',dst10)
Example #18
Source File: aruco_detect_markers_augmented_reality.py From Mastering-OpenCV-4-with-Python with MIT License | 5 votes |
def draw_augmented_overlay(pts_1, overlay_image, image): """Overlay the image 'overlay_image' onto the image 'image'""" # Define the squares of the overlay_image image to be drawn: pts_2 = np.float32([[0, 0], [overlay_image.shape[1], 0], [overlay_image.shape[1], overlay_image.shape[0]], [0, overlay_image.shape[0]]]) # Draw border to see the limits of the image: cv2.rectangle(overlay_image, (0, 0), (overlay_image.shape[1], overlay_image.shape[0]), (255, 255, 0), 10) # Create the transformation matrix: M = cv2.getPerspectiveTransform(pts_2, pts_1) # Transform the overlay_image image using the transformation matrix M: dst_image = cv2.warpPerspective(overlay_image, M, (image.shape[1], image.shape[0])) # cv2.imshow("dst_image", dst_image) # Create the mask: dst_image_gray = cv2.cvtColor(dst_image, cv2.COLOR_BGR2GRAY) ret, mask = cv2.threshold(dst_image_gray, 0, 255, cv2.THRESH_BINARY_INV) # Compute bitwise conjunction using the calculated mask: image_masked = cv2.bitwise_and(image, image, mask=mask) # cv2.imshow("image_masked", image_masked) # Add the two images to create the resulting image: result = cv2.add(dst_image, image_masked) return result # Create the dictionary object and the parameters:
Example #19
Source File: trans.py From ocr.pytorch with MIT License | 5 votes |
def tranfun(self, image): img = trans_utils.getcvimage(image) h,w = img.shape[:2] org = np.array([[0,np.random.randint(0,self.maxv)], [w,np.random.randint(0,self.maxv)], [0,h-np.random.randint(0,self.maxv)], [w,h-np.random.randint(0,self.maxv)]],np.float32) dst = np.array([[0, 0], [w, 0], [0, h], [w, h]], np.float32) M = cv2.getPerspectiveTransform(org,dst) res = cv2.warpPerspective(img,M,(w,h)) return getpilimage(res)
Example #20
Source File: trans.py From ocr.pytorch with MIT License | 5 votes |
def tranfun(self, image_and_loc): image, left, top, right, bottom = image_and_loc w, h = image.size left = np.clip(left,0,w-1) right = np.clip(right,0,w-1) top = np.clip(top, 0, h-1) bottom = np.clip(bottom, 0, h-1) img = trans_utils.getcvimage(image) try: # global index res = getpilimage(img[top:bottom,left:right]) # res.save('test_imgs/crop-debug-{}.jpg'.format(index)) # index+=1 return res except AttributeError as e: print('error') image.save('test_imgs/t.png') print( left, top, right, bottom) h = bottom - top w = right - left org = np.array([[left - np.random.randint(0, self.maxv_w), top + np.random.randint(-self.maxv_h, self.maxv_h//2)], [right + np.random.randint(0, self.maxv_w), top + np.random.randint(-self.maxv_h, self.maxv_h//2)], [left - np.random.randint(0, self.maxv_w), bottom - np.random.randint(-self.maxv_h, self.maxv_h//2)], [right + np.random.randint(0, self.maxv_w), bottom - np.random.randint(-self.maxv_h, self.maxv_h//2)]], np.float32) dst = np.array([[0, 0], [w, 0], [0, h], [w, h]], np.float32) M = cv2.getPerspectiveTransform(org,dst) res = cv2.warpPerspective(img,M,(w,h)) return getpilimage(res)
Example #21
Source File: perspective.py From imutils with MIT License | 5 votes |
def four_point_transform(image, pts): # obtain a consistent order of the points and unpack them # individually rect = order_points(pts) (tl, tr, br, bl) = rect # compute the width of the new image, which will be the # maximum distance between bottom-right and bottom-left # x-coordiates or the top-right and top-left x-coordinates widthA = np.sqrt(((br[0] - bl[0]) ** 2) + ((br[1] - bl[1]) ** 2)) widthB = np.sqrt(((tr[0] - tl[0]) ** 2) + ((tr[1] - tl[1]) ** 2)) maxWidth = max(int(widthA), int(widthB)) # compute the height of the new image, which will be the # maximum distance between the top-right and bottom-right # y-coordinates or the top-left and bottom-left y-coordinates heightA = np.sqrt(((tr[0] - br[0]) ** 2) + ((tr[1] - br[1]) ** 2)) heightB = np.sqrt(((tl[0] - bl[0]) ** 2) + ((tl[1] - bl[1]) ** 2)) maxHeight = max(int(heightA), int(heightB)) # now that we have the dimensions of the new image, construct # the set of destination points to obtain a "birds eye view", # (i.e. top-down view) of the image, again specifying points # in the top-left, top-right, bottom-right, and bottom-left # order dst = np.array([ [0, 0], [maxWidth - 1, 0], [maxWidth - 1, maxHeight - 1], [0, maxHeight - 1]], dtype="float32") # compute the perspective transform matrix and then apply it M = cv2.getPerspectiveTransform(rect, dst) warped = cv2.warpPerspective(image, M, (maxWidth, maxHeight)) # return the warped image return warped
Example #22
Source File: televisionfunctions.py From SaltwashAR with GNU General Public License v3.0 | 5 votes |
def add_substitute_quad(image, substitute_quad, dst): # dst (zeroed) and src points dst = _order_points(dst) (tl, tr, br, bl) = dst min_x = min(int(tl[0]), int(bl[0])) min_y = min(int(tl[1]), int(tr[1])) for point in dst: point[0] = point[0] - min_x point[1] = point[1] - min_y (max_width,max_height) = _max_width_height(dst) src = _topdown_points(max_width, max_height) # warp perspective (with white border) substitute_quad = cv2.resize(substitute_quad, (max_width,max_height)) warped = np.zeros((max_height,max_width,3), np.uint8) warped[:,:,:] = 255 matrix = cv2.getPerspectiveTransform(src, dst) cv2.warpPerspective(substitute_quad, matrix, (max_width,max_height), warped, borderMode=cv2.BORDER_TRANSPARENT) # add substitute quad image[min_y:min_y + max_height, min_x:min_x + max_width] = warped return image
Example #23
Source File: markerfunctions.py From SaltwashAR with GNU General Public License v3.0 | 5 votes |
def get_topdown_quad(image, src): # src and dst points src = _order_points(src) (max_width,max_height) = _max_width_height(src) dst = _topdown_points(max_width, max_height) # warp perspective matrix = cv2.getPerspectiveTransform(src, dst) warped = cv2.warpPerspective(image, matrix, _max_width_height(src)) return warped
Example #24
Source File: utils.py From StegaStamp with MIT License | 5 votes |
def get_rand_transform_matrix(image_size, d, batch_size): Ms = np.zeros((batch_size, 2, 8)) for i in range(batch_size): tl_x = random.uniform(-d, d) # Top left corner, top tl_y = random.uniform(-d, d) # Top left corner, left bl_x = random.uniform(-d, d) # Bot left corner, bot bl_y = random.uniform(-d, d) # Bot left corner, left tr_x = random.uniform(-d, d) # Top right corner, top tr_y = random.uniform(-d, d) # Top right corner, right br_x = random.uniform(-d, d) # Bot right corner, bot br_y = random.uniform(-d, d) # Bot right corner, right rect = np.array([ [tl_x, tl_y], [tr_x + image_size, tr_y], [br_x + image_size, br_y + image_size], [bl_x, bl_y + image_size]], dtype = "float32") dst = np.array([ [0, 0], [image_size, 0], [image_size, image_size], [0, image_size]], dtype = "float32") M = cv2.getPerspectiveTransform(rect, dst) M_inv = np.linalg.inv(M) Ms[i,0,:] = M_inv.flatten()[:8] Ms[i,1,:] = M.flatten()[:8] return Ms
Example #25
Source File: train.py From Kaggle-Carvana-Image-Masking-Challenge with MIT License | 5 votes |
def randomShiftScaleRotate(image, mask, shift_limit=(-0.0625, 0.0625), scale_limit=(-0.1, 0.1), rotate_limit=(-45, 45), aspect_limit=(0, 0), borderMode=cv2.BORDER_CONSTANT, u=0.5): if np.random.random() < u: height, width, channel = image.shape angle = np.random.uniform(rotate_limit[0], rotate_limit[1]) # degree scale = np.random.uniform(1 + scale_limit[0], 1 + scale_limit[1]) aspect = np.random.uniform(1 + aspect_limit[0], 1 + aspect_limit[1]) sx = scale * aspect / (aspect ** 0.5) sy = scale / (aspect ** 0.5) dx = round(np.random.uniform(shift_limit[0], shift_limit[1]) * width) dy = round(np.random.uniform(shift_limit[0], shift_limit[1]) * height) cc = np.math.cos(angle / 180 * np.math.pi) * sx ss = np.math.sin(angle / 180 * np.math.pi) * sy rotate_matrix = np.array([[cc, -ss], [ss, cc]]) box0 = np.array([[0, 0], [width, 0], [width, height], [0, height], ]) box1 = box0 - np.array([width / 2, height / 2]) box1 = np.dot(box1, rotate_matrix.T) + np.array([width / 2 + dx, height / 2 + dy]) box0 = box0.astype(np.float32) box1 = box1.astype(np.float32) mat = cv2.getPerspectiveTransform(box0, box1) image = cv2.warpPerspective(image, mat, (width, height), flags=cv2.INTER_LINEAR, borderMode=borderMode, borderValue=( 0, 0, 0,)) mask = cv2.warpPerspective(mask, mat, (width, height), flags=cv2.INTER_LINEAR, borderMode=borderMode, borderValue=( 0, 0, 0,)) return image, mask
Example #26
Source File: PerspectiveTransformation.py From Finger-Detection-and-Tracking with BSD 2-Clause "Simplified" License | 5 votes |
def main(): global countClicks, coordinates, copyimage cv2.resizeWindow(windowname, 700, 700) while (countClicks < 4): preseedKey = cv2.waitKey(1) cv2.imshow(windowname, image) if preseedKey & 0xFF == 27: break pointone = np.float32( [[coordinates[0], coordinates[1]], [coordinates[2], coordinates[3]], [coordinates[4], coordinates[5]], [coordinates[6], coordinates[7]]]) pointtwo = np.float32([[0, 0], [300, 0], [0, 300], [300, 300]]) perspective = cv2.getPerspectiveTransform(pointone, pointtwo) output = cv2.warpPerspective(copyimage, perspective, (310, 310)) cv2.imshow("Output Image", output) cv2.waitKey(0) cv2.destroyAllWindows()
Example #27
Source File: genplate.py From deep_learning with MIT License | 5 votes |
def rotRandrom(img, factor, size): shape = size pts1 = np.float32( [[0, 0], [0, shape[0]], [shape[1], 0], [shape[1], shape[0]]]) pts2 = np.float32([[r(factor), r(factor)], [r(factor), shape[0] - r(factor)], [shape[1] - r(factor), r(factor)], [shape[1] - r(factor), shape[0] - r(factor)]]) M = cv2.getPerspectiveTransform(pts1, pts2) dst = cv2.warpPerspective(img, M, size) return dst
Example #28
Source File: genplate.py From deep_learning with MIT License | 5 votes |
def rot(img, angel, shape, max_angel): """ 使图像轻微的畸变 img 输入图像 factor 畸变的参数 size 为图片的目标尺寸 """ size_o = [shape[1], shape[0]] size = (shape[1] + int(shape[0] * cos((float(max_angel) / 180) * 3.14)), shape[0]) interval = abs(int(sin((float(angel) / 180) * 3.14) * shape[0])) pts1 = np.float32( [[0, 0], [0, size_o[1]], [size_o[0], 0], [size_o[0], size_o[1]]]) if(angel > 0): pts2 = np.float32([[interval, 0], [0, size[1]], [size[0], 0], [ size[0] - interval, size_o[1]]]) else: pts2 = np.float32([[0, 0], [interval, size[1]], [ size[0] - interval, 0], [size[0], size_o[1]]]) M = cv2.getPerspectiveTransform(pts1, pts2) dst = cv2.warpPerspective(img, M, size) return dst
Example #29
Source File: helpers.py From SnapSudoku with MIT License | 5 votes |
def warp_perspective(self, rect, grid): (tl, tr, br, bl) = rect widthA = np.sqrt(((br[0] - bl[0]) ** 2) + ((br[1] - bl[1]) ** 2)) widthB = np.sqrt(((tr[0] - tl[0]) ** 2) + ((tr[1] - tl[1]) ** 2)) # ...and now for the height of our new image heightA = np.sqrt(((tr[0] - br[0]) ** 2) + ((tr[1] - br[1]) ** 2)) heightB = np.sqrt(((tl[0] - bl[0]) ** 2) + ((tl[1] - bl[1]) ** 2)) # take the maximum of the width and height values to reach # our final dimensions maxWidth = max(int(widthA), int(widthB)) maxHeight = max(int(heightA), int(heightB)) # construct our destination points which will be used to # map the screen to a top-down, "birds eye" view dst = np.array([ [0, 0], [maxWidth - 1, 0], [maxWidth - 1, maxHeight - 1], [0, maxHeight - 1]], dtype="float32") # calculate the perspective transform matrix and warp # the perspective to grab the screen M = cv2.getPerspectiveTransform(rect, dst) warp = cv2.warpPerspective(grid, M, (maxWidth, maxHeight)) return self.make_it_square(warp)
Example #30
Source File: transforms.py From kaggle_carvana_segmentation with MIT License | 5 votes |
def __call__(self, img, mask=None): if random.random() < self.prob: height, width, channel = img.shape angle = random.uniform(-self.rotate_limit, self.rotate_limit) scale = random.uniform(1-self.scale_limit, 1+self.scale_limit) dx = round(random.uniform(-self.shift_limit, self.shift_limit)) * width dy = round(random.uniform(-self.shift_limit, self.shift_limit)) * height cc = math.cos(angle/180*math.pi) * scale ss = math.sin(angle/180*math.pi) * scale rotate_matrix = np.array([[cc, -ss], [ss, cc]]) box0 = np.array([[0, 0], [width, 0], [width, height], [0, height], ]) box1 = box0 - np.array([width/2, height/2]) box1 = np.dot(box1, rotate_matrix.T) + np.array([width/2+dx, height/2+dy]) box0 = box0.astype(np.float32) box1 = box1.astype(np.float32) mat = cv2.getPerspectiveTransform(box0, box1) img = cv2.warpPerspective(img, mat, (width, height), flags=cv2.INTER_LINEAR, borderMode=cv2.BORDER_REFLECT_101) if mask is not None: mask = cv2.warpPerspective(mask, mat, (width, height), flags=cv2.INTER_LINEAR, borderMode=cv2.BORDER_REFLECT_101) return img, mask