Помощь с программой распознавания лиц на языке Си
Мне нужно сделать программу "распознавания лиц" на языке Си. Входными данными являются количество обнаруженных "граней", высота и ширина изображения (не более 120), а затем координаты лица. После этого следующие входные данные представляют собой три массива, которые представляют значения RGB изображения.
Выводом программы должна быть исходная картинка, но с координатами, соединяющимися в виде зеленого прямоугольника. Альфа - значение в прямоугольнике должно быть 255, а снаружи-127.
Мы получаем несколько тестовых случаев для работы. Первый тестовый случай-это простой черный квадрат 5x5 со случайными координатами, выход для этого тестового случая в порядке.
Проблема возникает в остальных 3 тестовых случаях, которые являются реальными картинками. Что происходит, вместо зеленого прямоугольника, есть случайные зеленые линии и точки по всему изображению (даже не на координатах). И Альфа-значения, по-видимому, тоже радом, где несколько строк-Альфа 127, а несколько 255.
Edit: я определенно сформулировал все неправильно. Программа должна нарисовать зеленый прямоугольник и изменить Альфа - значения вокруг координат во входных данных. Сама программа не идентифицирует лицо.
#include <stdio.h> #define MAX 120 int main() { FILE* fin = fopen("input.txt", "r"); FILE* fout = fopen("output.txt", "w"); int R[MAX][MAX], G[MAX][MAX], B[MAX][MAX], x1[MAX], y1[MAX], x2[MAX], y2[MAX], A[MAX][MAX]; int h, w, n, i, j, k; fscanf(fin, "%d %d %d", &n, &h, &w); for (i = 0; i < n; i++) { fscanf(fin, "%d %d %d %d", &x1[i], &y1[i], &x2[i], &y2[i]); } for (i = 0; i < w; i++) { for (j = 0; j < h; j++) { fscanf(fin, "%d ", &R[i][j]); } } for (i = 0; i < w; i++) { for (j = 0; j < h; j++) { fscanf(fin, "%d ", &G[i][j]); } } for (i = 0; i < w; i++) { for (j = 0; j < h; j++) { fscanf(fin, "%d ", &B[i][j]); } } for (i = 0; i < w; i++) { for (j = 0; j < h; j++) { A[i][j] = 127; } } for (k = 0; k < n; k++) { for (i = x1[k]; i <= x2[k]; ++i) { G[i][y1[k]] = 255; G[i][y2[k]] = 255; A[i][y1[k]] = 255; A[i][y2[k]] = 255; R[i][y1[k]] = 0; R[i][y2[k]] = 0; B[i][y1[k]] = 0; B[i][y2[k]] = 0; } for (j = y1[k]; j <= y2[k]; ++j) { G[x1[k]][j] = 255; G[x2[k]][j] = 255; A[x1[k]][j] = 255; A[x2[k]][j] = 255; R[x1[k]][j] = 0; R[x2[k]][j] = 0; B[x1[k]][j] = 0; B[x2[k]][j] = 0; } } for (k = 0; k < n; k++) { for (i = x1[k] + 1; i <= x2[k] - 1; i++) { for (j = y1[k] + 1; j <= y2[k] - 1; j++) { A[i][j] = 255; } } } fprintf(fout, "/image %d %d RGBA\n", h, w); for (i = 0; i < w; i++) { for (j = 0; j < h; j++) { fprintf(fout, "%d %d %d %d ", R[i][j], G[i][j], B[i][j], A[i][j]); } } return 0; }
Что я уже пробовал:
Входные данные программы считываются правильно, так как я пробовал их распечатать, и они выходят нормально. Поэтому я попытался переписать циклы for несколькими различными способами, но независимо от того, какие пареметры я установил, результат получается один и тот же.