Witam, próbuje stworzyć program do kluczowania koloru z video i natrafiłem na problem którego nie mogę rozwiązać. Gdy odpalam program, zacina się i pojawiają sie 2 szare okna "Wykluczowany obraz" i "Oryginalny obraz". Używam algorytmu Vlahosa https://smirnov-am.github.io/chromakeying. Czy macie jakieś sugestie co robię źle?
int main()
{
VideoCapture video("PracticeResources/green.mp4");
Mat image = imread("PracticeResources/bg.jpg");
const float a1 = 0.9;
const float a2 = 0.2;
Size S = Size(1280, 720);
Mat src, res_front, res_back, res;
vector<Mat> channels, img_channels;
Mat alpha = Mat::zeros(S, CV_32F);
resize(image, image, S);
while(true)
{
video >> src;
if (src.empty()) break;
src.convertTo(src, CV_32F, 1.0 / 255);
resize(src, src, S);
split(src, channels);
split(image, img_channels);
alpha = Scalar::all(1.0) - a1 * (channels[1] - a2 * channels[0]);
threshold(alpha, alpha, 1, 1, THRESH_TRUNC);
threshold(-1 * alpha, alpha, 0, 0, THRESH_TRUNC);
alpha = -1 * alpha;
for (int i = 0; i < 3; ++i)
{
channels[i].convertTo(channels[i], CV_32F); // Konwersja typu danych
img_channels[i].convertTo(img_channels[i], CV_32F); // Konwersja typu danych
multiply(alpha, channels[i], channels[i]);
multiply(1 - alpha, img_channels[i], img_channels[i]);
}
merge(channels, res_front);
merge(img_channels, res_back);
res = res_front + res_back;
imshow("Wykluczowany obraz", res);
imshow("Oryginalny obraz", src);
}
return 0;
}