Ich habe ein Graustufenbild, das nur schwarz und weiß enthält. Es gibt einige isolierte schwarze Pixel aufgrund von Rauschen, die ich gerne loswerden möchte. Ich weiß, dass das Öffnen und Schließen eine Lösung sein könnte, aber ich habe das Gefühl, dass sie für mein Image nicht optimal sind. Also schrieb ich folgendes:OpenCV/C++ - Bearbeiten Sie alle isolierten Pixel
for (int i = 1; i < pixels.rows; ++i) {
for (int j = 1; j < pixels.cols; ++j) {
if ((pixels.at<char>(i, j) == 0) &&
(pixels.at<char>(i - 1, j) == 255) &&
(pixels.at<char>(i, j - 1) == 255) &&
(pixels.at<char>(i + 1, j) == 255) &&
(pixels.at<char>(i, j + 1) == 255)) {
pixels.at<char>(i, j) = 255;
}
}
}
Es soll durch mein Bild laufen und prüfen, ob das Pixel schwarz ist und seine Nachbarschaft weiß ist. Wenn dies der Fall ist, sollte das Pixel auch in ein weißes Pixel umgewandelt werden. Ich lief dies auf einem Testbild, das von diesem Mat erstellt wurde:
Mat pixels = (Mat_<float>(5, 5) <<
255, 255, 255, 255, 255,
255, 0, 255, 0, 255,
255, 255, 255, 255, 255,
255, 0, 255, 0, 255,
255, 255, 255, 255, 255);
Wenn ich den Code nichts lief passiert ist, nur das Originalbild erschien ...
Wenn ich eine einfachere Version von lief der Code, es hat funktioniert, also sollte die Syntax eigentlich stimmen:
for (int i = 1; i < pixels.rows; ++i) {
for (int j = 1; j < pixels.cols; ++j) {
if ((pixels.at<char>(i, j) == 0)) {
pixels.at<char>(i, j) = 255;
}
}
}
Findet jemand meinen Fehler darin?
Haben Sie versucht, durch den Code schrittweise die bedingte Anweisung sehen versagt, und was sind die Werte? – Hill