Hepimiz bir şekilde yüzük hediye alabiliyoruz. Bu hediyeyi almak için uğraşırken en büyük sorunumuz yüzüğün ölçüsü olabiliyor.
Bir başka sorun ise yurtdışı e-ticaret platformlarından yüzük sipariş edeceğimiz zaman ölçü birimleri bizim hesap sistemimizden farklı olduğu için ilgili numaraların parmağımıza olup olmayacağı konusu.
Bu ihtiyaçlar doğrultusunda parmak yüzük ölçüsünü bulabilmeye çalıştım.
Deneyebilirsiniz. Umarım faydalı olur.
import cv2 import numpy as np from math import pi para_width_mm = 26.15 # mm para_height_mm = 26.15 # mm pixel_array = np.array([11, 12, 13, 14, 15]) avg = np.average(pixel_array) pixel_to_mm = para_width_mm / avg def calc_distance(x1,y1,x2,y2): distance = round(np.sqrt((x1-x2)**2 + (y1-y2)**2)) print("distance in pixels = ", distance) print("distance in mm = ", distance/3.7795275) x=distance/3.7795 return x point_matrix = np.zeros((2,2),int) counter = 0 def mousePoints(event,x,y,flags,params): global counter if event == cv2.EVENT_LBUTTONDOWN: point_matrix[counter] = x,y counter += 1 # Görsel oku img = cv2.imread('yuzuk/test.jpg') hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV) mask = cv2.imread('yuzuk/test.jpg',0) res = cv2.bitwise_and(img, img, mask=mask) contours,hierarchy = cv2.findContours(mask,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) for cnt in contours: hull = cv2.convexHull(cnt) cv2.drawContours(img,[cnt],0,(0,255,0),2) cv2.drawContours(img,[hull],0,(0,0,255),2) cv2.imshow('image',img) cv2.imwrite('yuzuk/step1.jpg',img) while counter<=2: for x in range (0,2): cv2.circle(img,(point_matrix[x][0],point_matrix[x][1]),3,(0,0,255),cv2.FILLED) if counter == 2: starting_x = point_matrix[0][0] starting_y = point_matrix[0][1] ending_x = point_matrix[1][0] ending_y = point_matrix[1][1] cv2.rectangle(img, (starting_x, starting_y), (ending_x, ending_y), (0, 20, 20), 1) cv2.line(img,(starting_x,starting_y),(ending_x,ending_y),(0,0,255),1) distance = calc_distance(starting_x,starting_y,ending_x,ending_y) cv2.putText(img, str(distance*pi) + ' mm (circum)', (starting_x,starting_y), cv2.FONT_HERSHEY_PLAIN, 3, (0, 20, 20), 3) img_cropped = img[starting_y:ending_y, starting_x:ending_x] cv2.imshow("ROI", img_cropped) cv2.imwrite('yuzuk/step2.jpg',img_cropped) cv2.imshow("Orijinal Resim ", img) cv2.setMouseCallback("Orijinal Resim ", mousePoints) print(point_matrix) cv2.waitKey(10)