# (C) WiSi-Testpilot 2022
# letzte Änderung 30. Januar 2022
import glob
import datetime
import numpy as np
import cv2
import time
import math as m
debug = 1 # 1 = Einzelschrittmodus. Dann erhält man Plots mit den Masken
path = glob.glob("D:/LW_220130*.jpg") # <<<<<<<<<<<<<<<<<<<<<<<<< 6 Testdateien
# String für Spectrum Lab
# capture("C:\SID1\LW_"+str("YYMMDDhhmmss",now)+".jpg")
Magenta = (147, 20, 255)
YELLOW = (0, 255, 255)
DarkOrange = (0, 140, 255)
lite_MAGENTA = (255, 0, 255)
GREEN = (0, 255, 0,)
BLUE = (255, 0, 0)
WHITE = (200, 200, 200)
light_BLUE = (255, 191, 0)
Rose = (200, 200, 255)
RED = (0, 0, 255) # b g r
Olive = (150, 255, 150)
bg = np.zeros((750, 1500, 3), np.uint8) # Result Screen
bg = cv2.line(bg,(1,1),(1,700),(WHITE),2)
bg = cv2.line(bg,(1,699),(2450,699), WHITE,2) # Skala
for j in range (1,14):
bg = cv2.line(bg,(0, j * 50),(15, j * 50), WHITE,2) # Y- Ticks
fontScale = 0.6
fthickness = 1
font = cv2.FONT_HERSHEY_SIMPLEX
f = 2.5 # Plotfaktor
base = 680 # Basislinie
yo = 100 # Eckpunkte der Integrationsbereiche, o u l r = oben, unten, links, rechts
yu = 400
yu1 =450
axl = 70
axr = 80 # Rot, HWU, 18.3 KHz
bxl = 135
bxr = 145 # Gelb, GBZ / GQD, 19.58 kHz
cxl = 200
cxr = 210 # DarkOrange, HWU, 20.9 kHz
dxl = 1392
dxr = 1402 # Hell Magenta, ? HWK, 44.2 kHz
exl = 262
exr = 272 # Grün, GGD, 22.1 kHz
fxl = 243
fxr = 253 # Grau, ?, 22.6 kHz
gxl = 330
gxr = 340 # Blau, DHO38, 23.4 kHz
hxl = 1050
hxr = 1060 # lightBLUE, TFK Island, 37.5 kHz
ixl = 1200
ixr = 1210 # Rose, ?? 40.4 kHz, daneben Spiegelung
kxl = 1337
kxr = 1347 # hell Grün, 41.1 ??
jxl = 1479
jxr = 1489 # Magenta, NSY Italien, 45.9 kHz zur Zeit nicht in Betrieb
ateiler = (axr - axl) * (yu - yo)
bteiler = (bxr - bxl) * (yu - yo)
cteiler = (cxr - cxl) * (yu - yo)
dteiler = (dxr - dxl) * (yu - yo)
eteiler = (exr - exl) * (yu - yo)
fteiler = (fxr - fxl) * (yu - yo)
gteiler = (gxr - gxl) * (yu - yo)
hteiler = (hxr - hxl) * (yu - yo)
iteiler = (ixr - ixl) * (yu - yo)
jteiler = (jxr - jxl) * (yu - yo)
kteiler = (kxr - kxl) * (yu - yo)
for name in path: # laeuft ueber alle Files in path
# print(name)
position = name.find(".jpg")
# print (position)
zeit = name[position-6:position] # Zeit wird aus dem Filenamen extrahiert
# print ("Stunde Minute Sekunde", zeit)
h = zeit[0:2]
m = zeit[2:4]
s = zeit[4:6]
ctime = (float(h) * 3600 ) + (float(m) *60) + float(s)
x = round (ctime / 60) # zb 40 dehnt den Plot
print (h,' ', m, ' ', s, ' ', x)
if (m == '00') and ((s == '00') or (s == '59')):
bg = cv2.line(bg,(x,700),(x, 715), WHITE, 2) # X ganze Stunden-Ticks
org = (x, 730) # war 535
bg = cv2.putText(bg, h, org, font, fontScale, WHITE, fthickness, cv2.LINE_AA) # beschriftet die Stunden
if ((m == '30') or (m == '15') or (m == '45')) and ((s == '00') or (s == '59')):
bg = cv2.line(bg,(x,700),(x, 710), WHITE, 1) # X 1/4 Stunden-Ticks
streamout = cv2.imread(name) # Plot wird eingelesen und im Array streamout gespeichert
save = cv2.cvtColor(streamout, cv2.COLOR_BGR2GRAY) # RGB zu Grau, streamout und save sind Arrays mit den Dimensionen des Plots
if debug == 1:
streamout = cv2.rectangle(streamout, (axl, yo), (axr, yu), RED, 1) # "streamout =" ist (in Python3) überflüssig
streamout = cv2.rectangle(streamout, (axl, yu), (axr, yu1), RED, -1)
streamout = cv2.rectangle(streamout, (bxl, yo), (bxr, yu), YELLOW , 1) # "1" = Dicke
streamout = cv2.rectangle(streamout, (bxl, yu), (bxr, yu1), YELLOW , -1) # "-1" = gefüllte Flaeche
streamout = cv2.rectangle(streamout, (cxl, yo), (cxr, yu), DarkOrange, 1)
streamout = cv2.rectangle(streamout, (cxl, yu), (cxr, yu1), DarkOrange, -1)
streamout = cv2.rectangle(streamout, (dxl, yo), (dxr, yu), lite_MAGENTA, 1)
streamout = cv2.rectangle(streamout, (dxl, yu), (dxr, yu1), lite_MAGENTA, -1)
streamout = cv2.rectangle(streamout, (exl, yo), (exr, yu), GREEN, 1)
streamout = cv2.rectangle(streamout, (exl, yu), (exr, yu1), GREEN, -1)
streamout = cv2.rectangle(streamout, (fxl, yo), (fxr, yu), WHITE, 1)
streamout = cv2.rectangle(streamout, (fxl, yu), (fxr, yu1), WHITE, -1)
streamout = cv2.rectangle(streamout, (gxl, yo), (gxr, yu), BLUE, 1)
streamout = cv2.rectangle(streamout, (gxl, yu), (gxr, yu1), BLUE, -1)
streamout = cv2.rectangle(streamout, (hxl, yo), (hxr, yu), light_BLUE, 1)
streamout = cv2.rectangle(streamout, (hxl, yu), (hxr, yu1), light_BLUE, -1)
streamout = cv2.rectangle(streamout, (ixl, yo), (ixr, yu), Rose, 1)
streamout = cv2.rectangle(streamout, (ixl, yu), (ixr, yu1), Rose, -1)
streamout = cv2.rectangle(streamout, (jxl, yo), (jxr, yu), Magenta, 1)
streamout = cv2.rectangle(streamout, (jxl, yu), (jxr, yu1), Magenta, -1)
streamout = cv2.rectangle(streamout, (kxl, yo), (kxr, yu), Olive, 1)
streamout = cv2.rectangle(streamout, (kxl, yu), (kxr, yu1), Olive, -1)
asignal = 0
for i in range (axl, axr): ################### Integration
for j in range (yo, yu):
bw = save[j,i]
asignal = asignal + bw
afl = base - int (asignal / ateiler * f)
bsignal = 0
for i in range (bxl, bxr):
for j in range (yo, yu):
bw = save[j,i]
bsignal = bsignal + bw
bfl = base - int (bsignal / bteiler * f)
csignal = 0
for i in range (cxl, cxr):
for j in range (yo, yu):
bw = save[j,i]
csignal = csignal + bw
cfl = base - int (csignal / cteiler * f)
dsignal = 0
for i in range (dxl, dxr):
for j in range (yo, yu):
bw = save[j,i]
dsignal = dsignal + bw
dfl = base - int (dsignal / dteiler * f)
esignal = 0
for i in range (exl, exr):
for j in range (yo, yu):
bw = save[j,i]
esignal = esignal + bw
efl = base - int (esignal / eteiler * f)
fsignal = 0
for i in range (fxl, fxr):
for j in range (yo, yu):
bw = save[j,i]
fsignal = fsignal + bw
ffl = base - int (fsignal / fteiler * f)
gsignal = 0
for i in range (gxl, gxr):
for j in range (yo, yu):
bw = save[j,i]
gsignal = gsignal + bw
gfl = base - int (gsignal / gteiler * f)
hsignal = 0
for i in range (hxl, hxr):
for j in range (yo, yu):
bw = save[j,i]
hsignal = hsignal + bw
hfl = base - int (hsignal / hteiler * f)
isignal = 0
for i in range (ixl, ixr):
for j in range (yo, yu):
bw = save[j,i]
isignal = isignal + bw
ifl = base - int (isignal / iteiler * f)
jsignal = 0
for i in range (jxl, jxr):
for j in range (yo, yu):
bw = save[j,i]/1
jsignal = jsignal + bw
jfl = base - int (jsignal / jteiler * f)
ksignal = 0
for i in range (kxl, kxr):
for j in range (yo, yu):
bw = save[j,i]
ksignal = ksignal + bw
kfl = base - int (ksignal / kteiler * f)
y_t_color = RED ################## Plotten der Punkte
y_t_fuellung = 1
dicke = 1
y_t = (x, afl)
cv2.circle(bg, y_t, dicke , y_t_color, y_t_fuellung)
y_t_color = YELLOW
y_t = (x, bfl)
cv2.circle(bg, y_t, dicke , y_t_color, y_t_fuellung)
y_t_color = DarkOrange
y_t = (x, cfl)
cv2.circle(bg, y_t, dicke , y_t_color, y_t_fuellung)
y_t_color = lite_MAGENTA
y_t = (x, dfl-120) ### z.B. 120 ist offset, um Spuren zu trennen
cv2.circle(bg, y_t, dicke , y_t_color, y_t_fuellung)
y_t_color = GREEN
y_t = (x, efl)
cv2.circle(bg, y_t, dicke , y_t_color, y_t_fuellung)
y_t_color = WHITE
y_t = (x, ffl)
cv2.circle(bg, y_t, dicke , y_t_color, y_t_fuellung)
y_t_color = BLUE
y_t = (x, gfl)
cv2.circle(bg, y_t, dicke , y_t_color, y_t_fuellung)
y_t_color = light_BLUE
y_t = (x, hfl)
cv2.circle(bg, y_t, dicke , y_t_color, y_t_fuellung)
y_t_color = Rose
y_t = (x, ifl)
cv2.circle(bg, y_t, dicke , y_t_color, y_t_fuellung)
y_t_color = Magenta
y_t = (x, jfl)
cv2.circle(bg, y_t, dicke , y_t_color, y_t_fuellung)
y_t_color = Olive
y_t = (x, kfl)
cv2.circle(bg, y_t, dicke , y_t_color, y_t_fuellung)
if debug == 1:
cv2.imwrite('Masken.png',streamout)
cv2.imshow('SID Test, 30. Januar 2022, Boni-Whip Antenne & SDRplay rspdx', streamout)
cv2.waitKey(0)
bg = cv2.putText(bg,'Time / UTC', (580, 743), font, fontScale, WHITE, fthickness, cv2.LINE_AA)
bg = cv2.putText(bg,'WiSi 2022', (1350,743), font, 0.5, RED, fthickness, cv2.LINE_AA)
cv2.imwrite('Demo-Jan30-alleSpuren.png',bg) # schreibt einen .png
cv2.imshow('SID Test, Januar 2022, Boni-Whip Antenne & SDRplay rspdx', bg)
cv2.waitKey(0)
cv2.destroyAllWindows()