Проблема здесь:
for(int i = 0; i < 193; i++)
{
addWeighted(src1, 0.5, imread(arrOfimages[i+1]), 0.5, 0.0, srcOut, -1);
}
Вы добавляете +1 к i, которое в конце будет 193 и выходит за пределы. Вместо этого вы должны просто использовать int i = 1, например:
for(int i = 1; i < 193; i++)
{
addWeighted(src1, 0.5, imread(arrOfimages[i]), 0.5, 0.0, srcOut, -1);
}
Кроме того, вы добавляете src1 и новое изображение и копируете вывод в srcOut ... И на следующей итерации вы делаете это, но со следующим изображением, в конце вы получите в srcOut только результат добавления первого и последнее изображение. Если вы хотите наложить их все, это должно быть что-то вроде:
for(int i = 1; i < 193; i++)
{
addWeighted(src1, 0.5, imread(arrOfimages[i]), 0.5, 0.0, srcOut, -1);
src1 = srcOut;
}
Как примечание, предыдущий цикл:
stringstream str;
int a = 1;
for (int index = 0; index < 193 ; index++)
{
str << "C:/<path>/KCF" << a << ".bmp";
arrOfimages[index] = str.str();
str.str("");
a++;
}
можно записать так:
for (int index = 0; index < 193 ; index++)
{
stringstream str;
str << R"(C:\<path>\KCF)" << (a+1) << ".bmp";
arrOfimages[index] = str.str();
}
Обновление:
Вы хотели бы иметь смешанное изображение, которое сохраняет черные пятна. Для этого вы можете использовать bitwise_and из opencv следующим образом:
cv::Mat srcOut = cv::imread(arrOfImages[0], cv::IMREAD_GRAYSCALE);
for(int i = 1; i < 193; i++)
{
cv::bitwise_and(srcOut, cv::imread(arrOfImages[1], cv::IMREAD_GRAYSCALE), srcOut)
}