Numpy vs OpenCV aritmetika
Mint láttuk, a képmátrixokat az OpenCV Python felülete Numpy tömbökben biztosítja számunkra. Mind a Numpy, mind az OpenCV lehetőséget biztosít képek közötti aritmetikai műveletekre, mint például az összeadás, kivonás, szorzás. Ha az egyik kép helyett skalár értéket adunk meg, akkor minden képpontra egyenként fogja a skalár műveletet elvégezni.
Fontos!
Nagy különbség van a Numpy és az OpenCV aritmetika között! Numpy esetén alul- vagy túlcsorduláskor körkörös az értékváltás az értéktartományon belül, míg az OpenCV úgynevezett szaturált aritmetikát használ: túlcsorduláskor a maximális, alulcsorduláskor a minimális értéket adja! Emiatt célszerűbb az OpenCV aritmetikai függvények használata, még ha a Numpy egyszerűbb is lenne.
Próbáljuk ki az alábbiakat.
nparr = np.array([0, 50, 100, 150, 200, 250], dtype=np.uint8)
print(nparr)
print(nparr + 100)
print(nparr - 100)
print(cv2.add(nparr, 100))
print(cv2.add(nparr, -100))
Az eredmények:
[ 0 50 100 150 200 250]
[100 150 200 250 44 94]
[156 206 0 50 100 150]
[[100]
[150]
[200]
[250]
[255]
[255]]
[[ 0]
[ 0]
[ 0]
[ 50]
[100]
[150]]
A Numpy a túlcsordulást és az alulcsordulást másként kezeli, mint az OpenCV! Az OpenCV Numpy eredménye más felépítésű, mint a Numpy összeadásé.
További példák (angol nyelven):