OpenCVを使ってC++でRGBカラー画像をグレースケールに変換しようとしていますが、唯一取得できるのは青色のスケール画像です。
Original
"Converted"opencv:RGBからグレースケールへの変換だけが青色になる
Vec3b simpleAveraging(Vec3b color){
Vec3b gray = ((float)color[0] + (float)color[1] + (float)color[2])/3.0;
return gray;
}
Vec3b weightedAverage1(Vec3b color){
Vec3b gray = 0.3 * (float)color[2] + 0.59 * (float)color[1] + 0.11 * (float)color[0];
return gray;
}
Vec3b weightedAverage2(Vec3b color){
Vec3b gray = 0.2126 * (float)color[2] + 0.7152 * (float)color[1] + 0.0722 * (float)color[0];
return gray;
}
Vec3b weightedAverage3(Vec3b color){
Vec3b gray = 0.299 * (float)color[2] + 0.587 * (float)color[1] + 0.114 * (float)color[0];
return gray;
}
...
for(int i = 0; i < 12; i++){
for(int y = 0; y < img[i].rows; y++){
for(int x = 0; x < img[i].cols; x++){
color = img[i].at<Vec3b>(Point(x, y));
img[i].at<Vec3b>(Point(x, y)) = weightedAverage3(color);
}
}
}
それは大学のプロジェクトのためのものであり、私の教授は、私がCV_RGB2GRAYを使用することはできませんので、これらのアルゴリズムを使用するように私に言いました。
私はあらゆる方法で青い縮尺を取得します。
いずれかがCV_8UC1(グレースケール)にIMGの種類を設定したり、初期3channelの全3つのチャネルを設定しますweightedAverage3(カラー)に画像を変換します。今は青色の最初のチャンネルだけを設定しています。 –
グレースケール画像は単一のチャンネルのみで構成されているので、 'cv :: Vec3b'を返すことは意味をなさないので、' uint8_t'でなければなりません。 –