Grundsätzlich möchte ich jeden Kanalwert des Bildes mit Vektor multiplizieren. Zum Beispiel Vec4f (1,2,3,4) 1 * Roter Kanal von Bild 2 * Grüner Kanal und so weiter Hier ist mein Code (nicht ein vollständiger Code und hat einige Fehler) aber mein Chef sagt, es muss besser und einfacher Weg sein mit opencv aber ich konnte es nicht herausfinden. Danke im Voraus.Multiplizieren Sie jeden Kanal Pixel mit gegebenem Vektor
void scaleImage(TextureData& dst, TextureData const& src, cv::Vec4f
const& scale)
{
auto size = src.info.size;
dst=src;
cv::Mat bgr[4];
cv::split(src.levels[0].images[0], bgr);
for (int y = 0; y < size.height; ++y)
{
for (int x = 0; x < size.width; ++x)
{
src.levels[0].images[0].channels();
if (src.levels[0].images[0].channels() == 4)
{
auto& imgRGB = dst.levels[0].images[0].at<cv::Vec4f>(x, y);
imgRGB[3] = static_cast<uint8_t>(scale.w()*bgr[3].at[x, y]);
imgRGB[2] = static_cast<uint8_t>(scale.x()*bgr[2].at[x, y]);
imgRGB[1] = static_cast<uint8_t>(scale.y()*bgr[1].at[x, y]);
imgRGB[0] = static_cast<uint8_t>(scale.z()*bgr[0].at[x, y]);
}
if (src.levels[0].images[0].channels() == 3)
{
auto& imgRGB = dst.levels[0].images[0].at<cv::Vec3f>(x, y);
imgRGB[2] = static_cast<uint8_t>(scale.x()*bgr[2].at[x, y]);
imgRGB[1] = static_cast<uint8_t>(scale.y()*bgr[1].at[x, y]);
imgRGB[0] = static_cast<uint8_t>(scale.z()*bgr[0].at[x, y]);
}
if (src.levels[0].images[0].channels() == 2)
{
auto& imgRGB = dst.levels[0].images[0].at<cv::Vec2f>(x, y);
imgRGB[1] = static_cast<uint8_t>(scale.x()*bgr[2].at[x, y]);
imgRGB[0] = static_cast<uint8_t>(scale.y()*bgr[1].at[x, y]);
}
if (src.levels[0].images[0].channels() == 2)
{
auto& imgRGB = dst.levels[0].images[0].at<float>(x, y);
imgRGB[0] = static_cast<uint8_t>(scale.x()*bgr[2].at[x, y]);
}
}
}
Vielen Dank Antonio kostet aber Mat * Skalar gibt Fehler –