Mein Titel möglicherweise nicht klar genug, aber bitte schauen Sie sich genau auf die folgende Beschreibung. Vielen Dank im Voraus.Opencv obatin bestimmten Pixel RGB-Wert basierend auf Maske
Ich habe ein RGB-Bild und ein binäres Maskenbild:
Mat img = imread("test.jpg")
Mat mask = Mat::zeros(img.rows, img.cols, CV_8U);
einige diejenigen, auf die Maske Geben Sie nehmen die Anzahl der Einsen ist N. Nun ist die Nicht-Null-Koordinaten bekannt sind, auf der Grundlage dieser Koordinaten, wir kann sicherlich das entsprechende Pixel-RGB-Wert des Ursprungs image.I erhalten wissen, dass dies durch den folgenden Code erreicht werden kann:
Mat colors = Mat::zeros(N, 3, CV_8U);
int counter = 0;
for (int i = 0; i < mask.rows; i++)
{
for (int j = 0; j < mask.cols; j++)
{
if (mask.at<uchar>(i, j) == 1)
{
colors.at<uchar>(counter, 0) = img.at<Vec3b>(i, j)[0];
colors.at<uchar>(counter, 1) = img.at<Vec3b>(i, j)[1];
colors.at<uchar>(counter, 2) = img.at<Vec3b>(i, j)[2];
counter++;
}
}
}
Und die coords wird wie folgt sein: enter image description here
Allerdings kostet diese zwei Schicht von for-Schleife zu viel Zeit. Ich habe mich gefragt, ob es eine schnellere Methode gibt, Farben zu verwenden, ich hoffe, ihr versteht, was ich vermitteln wollte.
PS: Wenn ich Python verwenden kann, kann dies nur einen Satz in getan werden:
colors = img[mask == 1]
Warum heißt das Ziel 'Mat'' coords', wenn Sie keine Koordinaten darin speichern, sondern Pixelwerte aus dem Eingangsbild? | Auch dieser Python-Code ist falsch, numpy Arrays sind nicht aufrufbar. Meintest du "img [mask == 1]"? Darüber hinaus erzeugt es auch keine Koordinatenliste. –
Vielen Dank für Ihre Art erinnern :) – Terry