das ganze Bild zu verwischen, vorausgesetzt, Sie die ursprüngliche (In-Place-Filterung von cv::GaussianBlur unterstützt wird) überschrieben werden soll, werden Sie so etwas wie
cv::GaussianBlur(image, image, Size(0, 0), 4);
haben verschwimmen nur Region Verwendung Mat::operator()(const Rect& roi) die Region zu extrahieren:
cv::Rect region(x, y, w, h);
cv::GaussianBlur(image(region), image(region), Size(0, 0), 4);
Oder wenn Sie die unscharfe Ausgabe in einem separaten Bild wollen:
cv::Rect region(x, y, w, h);
cv::Mat blurred_region;
cv::GaussianBlur(image(region), blurred_region, Size(0, 0), 4);
cv::Rect region(x, y, w, h);
cv::Mat blurred_region;
cv::GaussianBlur(image(region), blurred_region, Size(0, 0), 4);
Das obige verwendet die Standardoption BORDER_CONSTANT
Option, die nur davon ausgeht, alles außerhalb des Bildes ist 0, wenn die Unschärfe zu tun. Ich bin mir nicht sicher, was es mit Pixeln am Rand einer Region macht. Sie können erzwingen, dass Pixel außerhalb der Region ignoriert werden (BORDER_CONSTANT | BORDER_ISOLATE). SO denkt es, dass es wahrscheinlich die Pixel außerhalb der Region verwendet. Sie müssen die Ergebnisse von oben mit vergleichen:
const int bsize = 10;
cv::Rect region(x, y, w, h);
cv::Rect padded_region(x - bsize, y - bsize, w + 2 * bsize, h + 2 * bsize)
cv::Mat blurred_padded_region;
cv::GaussianBlur(image(padded_region), blurred_padded_region, Size(0, 0), 4);
cv::Mat blurred_region = blurred_padded_region(cv::Rect(bsize, bsize, w, h));
// and you can then copy that back into the original image if you want:
blurred_region.copyTo(image(region));
Scheint, dass diese Methode nicht aufpasst von der Grenze - es benutzt immer noch eine Art von Interpolation anstelle dessen, was wirklich außerhalb der Region im Bild ist. Habe ich Recht damit? – xuhdev
@xuhdev Sie haben Recht. Ich habe meiner Antwort ein Beispiel hinzugefügt, um dies zu umgehen. Wenn sich die Region in der Nähe von einem oder zwei Boardern des enthaltenen Bildes befindet, müssen Sie etwas Unordnung hinzufügen, um damit fertig zu werden. – Bull
@xuhdev, nach dem Blick auf den Filter-Engine-Code, denke ich jetzt, dass Sie vielleicht nicht richtig sind. Müssen Sie testen. – Bull