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)

