anais la bg
This commit is contained in:
78
anaislpb.py
Normal file
78
anaislpb.py
Normal file
@@ -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)
|
||||
Reference in New Issue
Block a user