Vignettenfilter in opencv erstellen?

8

Wie können wir Vignettenfilter in opencv machen? Müssen wir irgendeinen Algorithmus dafür implementieren oder nur mit den Werten von BGR spielen? Wie können wir diese Art von Filtern machen? Ich sah seine Implementierung hier , aber ich habe es nicht klar verstanden. Jeder, der über eine vollständige Anleitung für Algorithmen und eine Anleitung zur Implementierung verfügt, wird sehr geschätzt.

Nach Abid rehman K antwort habe ich das in C ++ versucht

%Vor%

d zeigt rechts an, aber e=v*d line verursacht einen Laufzeitfehler von

%Vor%     
AHF 26.03.2014, 08:01
quelle

4 Antworten

16

Zuallererst beschreibt Abid Rahman K den einfachsten Weg, diesen Filter zu verwenden. Du solltest ernsthaft seine Antwort mit Zeit und Aufmerksamkeit studieren. ist hatte noch nie von diesem Filter gehört.

Brownys Implementierung von dieser Filter ist wesentlich komplexer. Allerdings habe ich seinen Code in die C ++ API portiert und vereinfacht, damit Sie die Anweisungen selbst befolgen können.

%Vor%

Wie img aussieht:

%Vor%

Wie maskImg aussieht:

%Vor%

Wie Ausgabe aussieht:

Wie im obigen Code angegeben, können Sie durch Ändern der Werte von firstPt , radius und power stärkere / schwächere künstlerische Effekte erzielen.

Viel Glück!

    
karlphillip 05.04.2014, 04:57
quelle
8

Sie können eine einfache Implementierung mit in OpenCV verfügbaren Gaußschen Kerneln durchführen.

  1. Laden Sie das Bild, erhalten Sie die Anzahl der Zeilen und Spalten
  2. Erstellen Sie zwei Gauß-Kerne mit Größenzeilen und -spalten, sagen wir A, B. Seine Varianz hängt von Ihren Bedürfnissen ab.
  3. C = transponiere (A) * B, dh multipliziere einen Spaltenvektor mit einem Zeilenvektor, so dass das Ergebnisarray die gleiche Größe wie das Bild haben soll.
  4. D = C / C. max ()
  5. E = img * D

Siehe die folgende Implementierung (für ein Graustufenbild):

%Vor%

Unten ist mein Ergebnis:

Gleiches gilt für Farbbild:

HINWEIS: Natürlich ist es zentriert. Sie müssen zusätzliche Änderungen vornehmen, um den Fokus auf andere Orte zu verschieben.

    
Abid Rahman K 03.04.2014 16:03
quelle
0

Hier ist eine C ++ - Implementierung von Vignetting für Graustufenbild

%Vor%     
Suleiman 16.03.2017 08:00
quelle
0

Hier ist meine C ++ - Implementierung des Vignette-Filters auf Colored Image mit opencv. Es ist schneller als die angenommene Antwort.

%Vor%     
lazykiller 11.07.2017 20:26
quelle