Seite 1 von 1

OpenCV Interpolation funktioniert nicht

Verfasst: Donnerstag 14. November 2019, 09:28
von quanux
Hallo zusammen,
ich habe folgendes Problem, ich würde gerne mittels OpenCV die Größe eines Filmes ändern.
Das funktioniert gut, allerdings werden durch die Umrechnung die dargestellten Linien stufige, was ziemlich scheiße ausschaut.
OpenCV bieten ja eigentlich über den Zusatz „interpolation= z.B.: cv2.INTER_NEAREST“ die Option an diese Kanten zu glätten, allerdings ist es bei mir so, dass egal welche Interpolation ich wähle, es überhaupt keinen Einfluss auf das Endergebnis hat.

Das gleiche Problem hab ich auch, wenn ich bei cv2.warpPerspective eine Interpolation versuche.

Ich verwende Python27 auf Windows 10.
Der Code schaut etwa so aus:

Code: Alles auswählen

import cv2

cap = cv2.VideoCapture('videoIN.mp4')
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
ret, frame = cap.read()
out = cv2.VideoWriter('videoOUT.avi', fourcc, 30.0, (1280, 720))

while (cap.isOpened()):
	ret, frame = cap.read()
	
	if ret:
	        
            img = cv2.resize(frame, (1280, 720), interpolation=cv2.INTER_NEAREST)
            out.write(img)
            
       else:
            break
            
cap.release()
out.release()

  	

Re: OpenCV Interpolation funktioniert nicht

Verfasst: Donnerstag 14. November 2019, 09:51
von __blackjack__
@quanux: Also `cv2.INTER_NEAREST` ist gerade die Option die *nicht* glättet sondern einfach das nächstliegende Pixel aus dem Ausgangsbild nimmt ohne etwas an den Pixelwerten zu verändern. Wenn die Standardeinstellung (lineare Interpolation) nicht gut aussieht, dann bleiben noch `cv2.INTER_CUBIC` und `cv2.INTER_LANCZOS4` wenn das Bild vergrössert wird. Und falls Dir davon kein Ergebnis gefällt, ist die Frage ob das überhaupt möglich ist allgemein das Bild so zu vergrössern, dass Linien nicht stufig aussehen, denn letztlich muss der Rechner beim Vergrössern Pixel/Details ”erfinden” die im Original nun mal einfach nicht vorhanden sind.

Re: OpenCV Interpolation funktioniert nicht

Verfasst: Donnerstag 14. November 2019, 11:04
von quanux
Hi BlackJack,
vielen Dank für die schnelle Antwort.
Das war jetzt von mir im Beispiel vielleicht etwas ungünstig gewählt, ich habe tatsächlich alle Interpolationen ausprobiert und miteinander verglichen. Das Ergebnis war immer exakt das gleiche.
Und ich will das Bild nicht vergrößern sondern verkleinern.

Re: OpenCV Interpolation funktioniert nicht

Verfasst: Donnerstag 14. November 2019, 11:27
von __blackjack__
@quanux: Exakt das gleiche im Sinne von ``new_image == old_image`` mag ich jetzt irgendwie nicht glauben. Für's verkleinern empfiehlt die Dokumentation ja `cv2.INTER_AREA`. Hast Du mal ein Beispielbild zur Hand?

Re: OpenCV Interpolation funktioniert nicht

Verfasst: Donnerstag 14. November 2019, 13:46
von quanux
Oh Mann :oops:,
also es schaut tatsächlich mit Nearest, linear, cubic und lanczos4 exact gleich aus.
Aber mit Area funktioniert es, das kannte ich noch nicht.

Hast du auch so einen guten Tip für cv2.warpPerspective?
Da funktioniert es mit Area leider nicht.

Vielen Dank für die super schnelle Hilfe.

Re: OpenCV Interpolation funktioniert nicht

Verfasst: Donnerstag 14. November 2019, 14:17
von __deets__
warpPerspective kennt doch den gleichen Parameter. Tut der nicht?

https://docs.opencv.org/2.4/modules/img ... rderValue)

Re: OpenCV Interpolation funktioniert nicht

Verfasst: Freitag 15. November 2019, 07:49
von quanux
Ja, eigentlich schon, nur scheint der an meinem Endergebnis nichts zu ändern.