OpenCV ersetzen bestimmte Pixelwerte mit einem anderen Wert
Möchte ich erkennen, die eine bestimmte pixel-Wert (sagen wir, 128 in eine vorzeichenlose 8-bit 1-Kanal-Bild) in einer cv::Mat
Bild und ersetzen Sie den Wert aller Pixel mit bestimmten Wert mit einem anderen Wert (ersetzen jedes mit 128 120). Gibt es eine effiziente Möglichkeit, dies zu tun? Oder sollte ich die Suche und Behauptung Operationen, pixel für pixel?
Ich mit Programmieren angefangen, konnte aber nicht abgeschlossen. Hier der Teil meines Codes:
cv::Mat source;
unsigned oldValue = 128;
unsigned newValue = 120;
cv::Mat temp = (source == oldValue);
- Ich sehe nicht, wie können Sie prüfen, einen bestimmten Wert ohne surfen Ihre Pixel. Es ist nur
O(N)
Komplexität. - haben Sie einen Blick auf cv::LUT, die in diesem tutorial: docs.opencv.org/doc/tutorials/core/how_to_scan_images/... erstellen Sie eine look-up-Tabelle, wobei die Tabelle[i] == ich überall, aber Tabelle[128] == 120
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
setTo
mit einer Maske:nicht sicher, ob es effizienter ist als
.setTo
, aber man könnte ein look-up-table (vor allem, wenn Sie mehrere Werte, die Sie ersetzen möchten, und Sie müssen zu ersetzen, die die gleichen Werte in mehrere Bilder (z.B. in jedem Bild einen video-stream)).Laut http://docs.opencv.org/doc/tutorials/core/how_to_scan_images/how_to_scan_images.html#the-core-function dies ist sehr effizient in speziellen Szenarien.