Tweaks for convenience
This commit is contained in:
parent
a7e4380151
commit
5b8a98e65b
3 changed files with 52 additions and 20 deletions
|
@ -12,6 +12,7 @@ Usage:
|
|||
|
||||
'''
|
||||
|
||||
|
||||
from pathlib import Path
|
||||
import numpy as np
|
||||
import cv2
|
||||
|
@ -19,13 +20,21 @@ import json
|
|||
import tqdm
|
||||
import math
|
||||
|
||||
dataset = Path('hof3-cam-baumer')
|
||||
|
||||
# SETTINGS:
|
||||
CALIB_FISHEYE = True
|
||||
# set needed detections. Use math.inf to scan the whole video
|
||||
needed_detections = math.inf # 20
|
||||
|
||||
# Defining the dimensions of checkerboard
|
||||
CHECKERBOARD = (6,9)
|
||||
CROPPED_HEIGHT = None # 1520
|
||||
|
||||
dataset = Path('hof3-cam-baumer-cropped')
|
||||
videofile = dataset / "chessboard.mp4"
|
||||
|
||||
# -----
|
||||
# END OF SETTINGS
|
||||
|
||||
snapshot_file = videofile.with_name(videofile.stem + '_snapshot.png')
|
||||
|
||||
# termination criteria
|
||||
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
|
||||
|
@ -39,7 +48,6 @@ objp[:,:2] = np.mgrid[0:CHECKERBOARD[0],0:CHECKERBOARD[1]].T.reshape(-1,2)
|
|||
objpoints = [] # 3d point in real world space
|
||||
imgpoints = [] # 2d points in image plane.
|
||||
|
||||
videofile = dataset / "chessboard7.mp4"
|
||||
cap = cv2.VideoCapture(videofile)
|
||||
|
||||
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
|
||||
|
@ -56,11 +64,17 @@ p2 = tqdm.tqdm(total=needed_detections)
|
|||
first_found=False
|
||||
no_frames_for = 0
|
||||
|
||||
needs_snapshot = not snapshot_file.exists()
|
||||
|
||||
while ((found < needed_detections) if math.isfinite(needed_detections) else True):
|
||||
ret, img = cap.read() # Capture frame-by-frame
|
||||
if not ret:
|
||||
break
|
||||
|
||||
if needs_snapshot:
|
||||
cv2.imwrite(snapshot_file, img)
|
||||
needs_snapshot = False
|
||||
|
||||
p.update()
|
||||
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
|
||||
|
||||
|
@ -98,5 +112,5 @@ cv2.destroyAllWindows()
|
|||
print(f"Found {found} detections")
|
||||
|
||||
|
||||
np.savez(dataset / "chessboard7-points.npz", objpoints=objpoints, imgpoints=imgpoints)
|
||||
np.savez(videofile.with_name(videofile.stem+'-points.npz') , objpoints=objpoints, imgpoints=imgpoints)
|
||||
|
||||
|
|
|
@ -20,18 +20,21 @@ import json
|
|||
import tqdm
|
||||
import math
|
||||
|
||||
# SETTINGS:
|
||||
CALIB_FISHEYE = True
|
||||
|
||||
dataset = Path('hof3-cam-baumer')
|
||||
|
||||
# set needed detections. Use math.inf to scan the whole video
|
||||
needed_detections = math.inf # 20
|
||||
|
||||
# Defining the dimensions of checkerboard
|
||||
CHECKERBOARD = (6,9)
|
||||
CROPPED_HEIGHT = None # 1520
|
||||
|
||||
CROPPED_HEIGHT = 1520
|
||||
dataset = Path('hof3-cam-baumer-cropped')
|
||||
videofile = dataset / "chessboard.mp4"
|
||||
|
||||
# -----
|
||||
# END OF SETTINGS
|
||||
|
||||
snapshot_file = videofile.with_name(videofile.stem + '_snapshot.png')
|
||||
|
||||
# prepare object points, like (0,0,0), (1,0,0), (2,0,0) ....,(6,5,0)
|
||||
if not CALIB_FISHEYE:
|
||||
|
@ -46,7 +49,7 @@ else:
|
|||
objpoints = [] # 3d point in real world space
|
||||
imgpoints = [] # 2d points in image plane.
|
||||
|
||||
videofile = dataset / "chessboard7.mp4"
|
||||
|
||||
cap = cv2.VideoCapture(videofile)
|
||||
_, img = cap.read()
|
||||
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
|
||||
|
@ -60,7 +63,7 @@ dim = {
|
|||
}
|
||||
|
||||
|
||||
loaded = np.load(dataset / "chessboard-points.npz")
|
||||
loaded = np.load(videofile.with_name(videofile.stem+'-points.npz') )
|
||||
objpoints, imgpoints = loaded['objpoints'], loaded['imgpoints']
|
||||
|
||||
print(f"Calculating matrixes with {len(objpoints)} detections")
|
||||
|
@ -120,8 +123,12 @@ else:
|
|||
if not dim2:
|
||||
dim2 = dim1
|
||||
if not dim3:
|
||||
dim3 = dim1
|
||||
if CROPPED_HEIGHT:
|
||||
dim3 = (dim1[0], CROPPED_HEIGHT)
|
||||
else:
|
||||
dim3 = dim1
|
||||
|
||||
|
||||
scaled_K = K * dim1[0] / DIM[0] # The values of K is to scale with image dimension.
|
||||
scaled_K[2][2] = 1.0 # Except that K[2][2] is always 1.0
|
||||
# This is how scaled_K, dim2 and balance are used to determine the final K used to un-distort image. OpenCV document failed to make this clear!
|
||||
|
@ -172,5 +179,7 @@ else:
|
|||
# img2 = cv2.imread("2.png")
|
||||
# cv2.imshow("none undistorted", img2)
|
||||
cv2.waitKey(0)
|
||||
# while cv2.waitKey(0) != ord('q'):
|
||||
# pass
|
||||
cv2.destroyAllWindows()
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ used for the homography later.
|
|||
this allows for more precise point placement, but might need some conversion in the next step
|
||||
3. Points are read and saved from points.json in the dataset folder
|
||||
"""
|
||||
from pathlib import Path
|
||||
import cv2
|
||||
import json
|
||||
import os
|
||||
|
@ -16,11 +17,19 @@ import numpy as np
|
|||
|
||||
from load_calibration import load_calibration
|
||||
|
||||
dataset = 'hof3-cam-baumer'
|
||||
snapshot_img = 'snapshot.png'
|
||||
points_fname = dataset + '/points.json'
|
||||
# SETTINGS
|
||||
|
||||
dataset = Path('hof3-cam-baumer-cropped')
|
||||
videofile = dataset / 'chessboard.mp4'
|
||||
points_fname = dataset / 'points.json'
|
||||
|
||||
# END SETTINGS
|
||||
|
||||
w, h, undistorted_img, undistort_points = load_calibration(dataset / "calibration.json")
|
||||
|
||||
|
||||
snapshot_file = videofile.with_name(videofile.stem + '_snapshot.png')
|
||||
|
||||
w, h, undistorted_img, undistort_points = load_calibration(dataset + "/fisheye_calibration_data.json")
|
||||
# with open(dataset + '/calibration-chessboard4.json', 'r') as fp:
|
||||
# with open(dataset + '/calibration-chessboard4.json', 'r') as fp:
|
||||
|
||||
|
@ -36,7 +45,7 @@ def add_point(event,x,y,flags,param):
|
|||
selected = None
|
||||
for i, p in enumerate(points):
|
||||
d = (p[0]-x)**2 + (p[1]-y)**2
|
||||
if d < 14:
|
||||
if d < 25:
|
||||
selected = i
|
||||
break
|
||||
print('click', selected)
|
||||
|
@ -52,7 +61,7 @@ cv2.namedWindow('original image')
|
|||
cv2.setMouseCallback('original image',add_point)
|
||||
|
||||
# cap = cv2.VideoCapture("./hof2-hikvision.mp4")
|
||||
cap = cv2.VideoCapture(dataset + "/" + snapshot_img)
|
||||
cap = cv2.VideoCapture(snapshot_file)
|
||||
img_w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
|
||||
img_h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
|
||||
|
||||
|
|
Loading…
Reference in a new issue