Ich benutze die C++ openCV API, und ich möchte nur bestimmte Pixel in einem Bild selektiv verwischen. Was ist der beste Weg, dies zu tun? Ich habe versucht, es über Submatrizen zu tun, aber ich konnte es nicht zur Arbeit bringen.OpenCV Filter Teil eines Bildes
//5 is the 'radius' i'm blurring (~1/2 kernel width)
cv::Rect srcRect;
srcRect.x = x - 5;
srcRect.y = y - 5;
srcRect.width = 2*5 + 1;
srcRect.height = 2*5 + 1;
cv::Rect dstRect;
dstRect.x = x;
dstRect.y = y;
dstRect.width = 1;
dstRect.height = 1;
cv::Mat src = srcImage(srcRect);
cv::Mat dst = dstImage(dstRect);
cv::blur(src, dst, cv::Size(5,5));
Mit dem obigen Code ändert sich nichts.
Wenn ich beide Rechtecke auf srcRect einstelle, sind die Unterbilder verschwommen, aber die gesamte dst ist dann verschwommen, anstatt nur das einzelne Pixel.
Irgendwelche Ideen?
Es scheint, dass cv :: Unschärfe _all_ Pixel in src verwischt. Ich möchte im Grunde ein einzelnes Pixel ändern und seinen Wert auf den Durchschnitt aller Werte festlegen. Irgendwelche Ideen? –
Ich denke, Sie müssen Ihre eigene Unschärfe implementieren, weil OpenCV eine integrierte Interpolationsmethode hat. Oder machen Sie dst ein separates Bild, so groß wie src, behalten Sie src, wie Sie es definiert haben, und kopieren Sie die Mitte der dstImage – Sam
Eigentlich in Ihrem Code, erstellt cv :: blur eine neue dst-Matrix, die eine verworfen Sie setzen, weil es nicht die gleiche Größe wie src hat. Alles, was Sie tun müssen, ist, das zentrale Pixel wieder in dstImage zu kopieren. – Sam