Detecteer hoek
This commit is contained in:
parent
0c115c3440
commit
4272a683d3
BIN
src/helpers/template_extraction/input/whack.jpg
Normal file
BIN
src/helpers/template_extraction/input/whack.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 184 KiB |
BIN
src/helpers/template_extraction/input/wood.jpg
Normal file
BIN
src/helpers/template_extraction/input/wood.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.8 MiB |
@ -2,6 +2,7 @@ import cv2
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
import math as m
|
||||||
|
|
||||||
# command:
|
# command:
|
||||||
# python template.py input_folder output_folder
|
# python template.py input_folder output_folder
|
||||||
@ -31,36 +32,40 @@ if(not os.path.isdir(output_folder)):
|
|||||||
print("Output folder not found")
|
print("Output folder not found")
|
||||||
exit()
|
exit()
|
||||||
|
|
||||||
|
scale_percentage = 25
|
||||||
|
|
||||||
# Aruco params
|
# Aruco params
|
||||||
detector_params = cv2.aruco.DetectorParameters()
|
detector_params = cv2.aruco.DetectorParameters()
|
||||||
dictionary = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_ARUCO_ORIGINAL)
|
dictionary = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_ARUCO_ORIGINAL)
|
||||||
detector = cv2.aruco.ArucoDetector(dictionary, detector_params)
|
detector = cv2.aruco.ArucoDetector(dictionary, detector_params)
|
||||||
|
|
||||||
for file in os.listdir(input_folder):
|
for file in os.listdir(input_folder):
|
||||||
|
# Laad een plaatje
|
||||||
filename = input_folder + '/' + file
|
filename = input_folder + '/' + file
|
||||||
out_filename = output_folder + '/' + file
|
out_filename = output_folder + '/' + file
|
||||||
img = cv2.imread(filename, 0)
|
img = cv2.imread(filename, 0)
|
||||||
small_img = cv2.resize(img, (750, 750))
|
|
||||||
|
# Rescaling
|
||||||
|
x_scale = int(img.shape[0]/100*scale_percentage)
|
||||||
|
y_scale = int(img.shape[1]/100*scale_percentage)
|
||||||
|
# print("X_scale:", x_scale)
|
||||||
|
# print("Y_scale:", y_scale)
|
||||||
|
|
||||||
|
# Detecteer markers
|
||||||
|
small_img = cv2.resize(img, (x_scale, y_scale))
|
||||||
(corners, ids, rejected) = detector.detectMarkers(small_img)
|
(corners, ids, rejected) = detector.detectMarkers(small_img)
|
||||||
new_image = cv2.aruco.drawDetectedMarkers(
|
new_image = cv2.aruco.drawDetectedMarkers(
|
||||||
small_img,
|
small_img,
|
||||||
corners,
|
corners,
|
||||||
ids)
|
ids)
|
||||||
|
|
||||||
# Debug
|
assert len(ids) == 4, "Not enough markers found"
|
||||||
for id in ids:
|
|
||||||
print(id)
|
|
||||||
print(corners[id[0]])
|
|
||||||
print()
|
|
||||||
|
|
||||||
|
# Zoek de "binneste" hoekjes
|
||||||
i = 0
|
i = 0
|
||||||
x = np.zeros(4, dtype=np.int32)
|
x = np.zeros(4, dtype=np.int32)
|
||||||
y = np.zeros(4, dtype=np.int32)
|
y = np.zeros(4, dtype=np.int32)
|
||||||
for corner in corners:
|
for corner in corners:
|
||||||
# print(ids[i])
|
|
||||||
# print(corner[0])
|
|
||||||
# print()
|
|
||||||
|
|
||||||
x[i] = corner[0][getCorner(ids[i])][0]
|
x[i] = corner[0][getCorner(ids[i])][0]
|
||||||
y[i] = corner[0][getCorner(ids[i])][1]
|
y[i] = corner[0][getCorner(ids[i])][1]
|
||||||
cv2.circle(
|
cv2.circle(
|
||||||
@ -69,23 +74,43 @@ for file in os.listdir(input_folder):
|
|||||||
radius=5,
|
radius=5,
|
||||||
color=(255, 100, 255),
|
color=(255, 100, 255),
|
||||||
thickness=-1)
|
thickness=-1)
|
||||||
|
|
||||||
print("x[%d]: %d"%(i, x[i]))
|
print("x[%d]: %d"%(i, x[i]))
|
||||||
print("y[%d]: %d"%(i, y[i]))
|
print("y[%d]: %d"%(i, y[i]))
|
||||||
print()
|
print()
|
||||||
i += 1
|
i += 1
|
||||||
|
|
||||||
offset = 20
|
# Draai plaatje om 0 en 1 gelijk te trekken
|
||||||
|
x0 = x[np.where(ids == 0)[0][0]]
|
||||||
|
x1 = x[np.where(ids == 1)[0][0]]
|
||||||
|
x_dif = x0-x1
|
||||||
|
|
||||||
|
y0 = y[np.where(ids == 0)[0][0]]
|
||||||
|
y1 = y[np.where(ids == 1)[0][0]]
|
||||||
|
y_dif = y0 - y1
|
||||||
|
|
||||||
|
angle_error_rad = np.arctan(y_dif/x_dif)
|
||||||
|
angle_error_deg = angle_error_rad * 180.0 / m.pi
|
||||||
|
print("Hoek deg", angle_error_deg)
|
||||||
|
|
||||||
|
# Calibreer afstand tov afstand tussen 0 en 1
|
||||||
|
|
||||||
|
|
||||||
|
# Teken rode balken
|
||||||
|
|
||||||
|
|
||||||
|
# Crop
|
||||||
|
offset = 180
|
||||||
crop_img = new_image[
|
crop_img = new_image[
|
||||||
np.min(x+offset):np.max(x-offset),
|
np.min(x+offset):np.max(x-offset),
|
||||||
np.min(y+offset):np.max(y-offset)
|
np.min(y+offset):np.max(y-offset)
|
||||||
]
|
]
|
||||||
|
|
||||||
print("imshape[0]: " + str(small_img.shape[0]))
|
# Check voor rode balken
|
||||||
print("imshape[1]: " + str(small_img.shape[1]))
|
|
||||||
cv2.imshow('window', new_image)
|
cv2.imshow('window', new_image)
|
||||||
cv2.imshow('cropped', crop_img)
|
cv2.imshow('cropped', crop_img)
|
||||||
|
|
||||||
|
# Keur af of sla op
|
||||||
# cv2.imwrite(out_filename, new_image)
|
# cv2.imwrite(out_filename, new_image)
|
||||||
|
|
||||||
cv2.waitKey(0)
|
cv2.waitKey(0)
|
||||||
cv2.destroyAllWindows
|
cv2.destroyAllWindows
|
Loading…
Reference in New Issue
Block a user