From f26a722d958938f82ddf8c2c51158abbe66da93d Mon Sep 17 00:00:00 2001 From: Mathias Couraud Date: Mon, 6 Oct 2025 23:53:00 +0200 Subject: [PATCH] anais la bg --- anaislpb.py | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 anaislpb.py diff --git a/anaislpb.py b/anaislpb.py new file mode 100644 index 0000000..7c731d5 --- /dev/null +++ b/anaislpb.py @@ -0,0 +1,78 @@ +import cv2 +import numpy as np + +def image_for_mathias(name="1.jpg"): + # Load and resize + image = cv2.imread(name) + height, width = image.shape[:2] + image = cv2.resize(image, (int(width * 0.2), int(height * 0.2))) + + # Grayscale + blur + gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) + blurred = cv2.GaussianBlur(gray, (5, 5), 0) + + # Threshold to isolate object + _, thresh = cv2.threshold(blurred, 50, 255, cv2.THRESH_BINARY_INV) + + # Find contours + contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) + c = max(contours, key=cv2.contourArea) + + # --- Step 1: Create mask --- + mask = np.zeros_like(gray) + cv2.drawContours(mask, [c], -1, 255, -1) + + # Add alpha channel + b, g, r = cv2.split(image) + rgba = cv2.merge([b, g, r, mask]) + + # --- Step 2: Crop tightly with padding --- + x, y, w, h = cv2.boundingRect(c) + padding = 10 + x, y = max(0, x-padding), max(0, y-padding) + w, h = min(rgba.shape[1]-x, w+2*padding), min(rgba.shape[0]-y, h+2*padding) + cropped = rgba[y:y+h, x:x+w] + + # --- Step 3: Perspective transform --- + rect = cv2.minAreaRect(c) + box = cv2.boxPoints(rect) # 4 corner points + box = np.array(box, dtype="float32") + + # Order the points + def order_points(pts): + rect = np.zeros((4, 2), dtype="float32") + s = pts.sum(axis=1) + rect[0] = pts[np.argmin(s)] # top-left + rect[2] = pts[np.argmax(s)] # bottom-right + diff = np.diff(pts, axis=1) + rect[1] = pts[np.argmin(diff)] # top-right + rect[3] = pts[np.argmax(diff)] # bottom-left + return rect + + src_pts = order_points(box) + + # Desired output size (tune for your code dimensions) + W, H = 600, 200 + dst_pts = np.array([ + [0, 0], + [W-1, 0], + [W-1, H-1], + [0, H-1] + ], dtype="float32") + + # Warp with perspective correction + M = cv2.getPerspectiveTransform(src_pts, dst_pts) + warped = cv2.warpPerspective(rgba, M, (W, H), borderMode=cv2.BORDER_CONSTANT, borderValue=(0,0,0,0)) + + # Save transparent deskewed image + cv2.imwrite("spotify_code_deskewed.jpg", warped) + + # Show result + cv2.imshow("Spotify Code Deskewed", warped) + cv2.waitKey(0) + cv2.destroyAllWindows() + + +l = ["1.jpg", "2.jpg", "3.jpg", "4.jpg"] +for name in l: + image_for_mathias(name) \ No newline at end of file