Compare commits

...

3 Commits

5 changed files with 83 additions and 1 deletions

View File

@ -32,4 +32,23 @@ _______________ _______________
| 5 6 | | 4 5 | | 5 6 | | 4 5 |
| | | | | | | |
--------------- --------------- --------------- ---------------
``` ```
## Calibration Layout Order
```
_______________ _______________
| | | |
| 1 2 3 0 | | |
| | | 1 2 |
| | | |
| 0 3 2 1 | | |
| | | |
| 1 2 3 0 | | |
| | | |
| | | 0 3 |
| 0 3 2 1 | | |
| | | |
--------------- ---------------
```

View File

@ -0,0 +1,29 @@
import cv2
import numpy as np
#outer template
outer = cv2.imread("graph.jpeg")
#inner image
inner = cv2.imread("emoji.jpeg")
rows, cols, ch = outer.shape
ir, ic, ich = inner.shape
print(f'{cols}x{rows}')
print(f'{ic}x{ir}')
# destination ponts on outer image
pts1 = np.float32([[15, 15], [200, 30], [50, 140]])
# corresponding points on inner image
pts2 = np.float32([[0, 0], [ic, 0], [0, ir]])
# transform inner to points on outer
M = cv2.getAffineTransform(pts2, pts1)
# apply
dst = cv2.warpAffine(inner, M, (cols, rows), borderMode=cv2.BORDER_TRANSPARENT)
final = outer.copy()
final[0:rows, 0:cols] = dst
cv2.imwrite("affine_poc.png", final)

BIN
fourcell/notes/emoji.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
fourcell/notes/graph.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

34
fourcell/notes/spec.txt Normal file
View File

@ -0,0 +1,34 @@
# apply_images
* Take calibration json as argument
* Create blank image of width and height
* Place idealized circles where hole punches are supposed to be
* Place fiducials in corners of images
* Take up to 4 images as arguments
* Perform AffineTransform on as many source locations as needed
* Place images according to AffineTransform
* Write final image out
### Potentials needs
* One time xy offset, calibrated to hole punches
* Hole punch several sheets at the same time, calibrate to one and print on them
* OR
* Calibrate, then print on un-punched sheets and place guides for punching
* (this may be less reliable)
# apply_svg
* Create svg document scaling width and height to 96dpi equivalent
* Normalize all measurements to 96dpi equivalent
* Place idealized circles where hole punches are supposed to be
* Take up to 4 svg files as arguments
* Find best fit for svg within 4 frames, rotation, scale and position
* Place or embed or re-write svg within frame, one at a time
* Write out final svg
### Potential needs
* One time xy offset, calibrated to hole punches
* Special board to draw this on (as opposed to free form mat)