ich versuche, eine BGRA Matte mit einem Zeiger wie folgt zu ändern:OpenCV Pixelmanipulation manchmal nicht funktioniert
//Bound the value between 0 to 255
uchar boundPixelValue(double c) {
c = int(c);
if (c > 255)
c = 255;
if (c < 0)
c = 0;
return (uchar) c;
}
for (int i = 0; i < rows; i++)
for (int j = 0; j < cols; j++)
for (int k = 0; k < 3; k++){
//This loop is accessing the first three channels
mat.ptr<Vec4b>(i)[j][k] = boundPixelValue(
1.0 * mat.ptr<Vec4b>(i)[j][k] * max/avg[k]);
}
Aber das gibt verschiedene Ausgänge jedes Mal, manchmal funktionieren und manchmal eine weiße leere Bild geben. Ich vermute, wenn dies aufgrund der nicht kontinuierlichen Daten ist, kann jemand helfen?
Eine zusätzliche Frage: Normalerweise greifen wir zuerst auf die Spalten eines 2D-Arrays zu, bevor wir auf die Zeilen zugreifen, weil es normalerweise schneller ist. Ich muss jedoch auf das Pixel unter Verwendung mat.ptr<Vec4b>(row)[col]
zugreifen. Also, sollte ich zuerst die Zeilen und dann die Spalte durchlaufen?
Was sind 'boundPixelValue',' max', 'avg'? Welche Arten? – Miki
Ich habe den boundPixelValue in der Frage hinzugefügt. "max" ist ein Integer-Typ, "avg" ist ein Integer-Array. – Tim
Überprüfen Sie den Code in meiner Antwort. Ich erkläre besser, was es macht, wenn es für dich funktioniert (ich habe nicht genug Details, um zu garantieren, dass es jetzt funktioniert, siehe bitte [mcve]). – Miki