/* Una imagen (tipo mapa de bits) se considera como una matriz de NxM pixels. Un pixel tiene asignado un nivel de gris, que es un número entero sin signo en el rango de 0 a 255 (escala de grises). Una operación común en el tratamiento de imágenes es la obtención del histograma de intensidades de los pixels, consistente en hallar, por cada valor posible de la intensidad (0 - 255), el número de pixels que tienen tal valor (frecuencia). Se pide escribir un programa que lea una imagen (matriz NxM de pixels) e imprima el histograma de la imagen de los pixels con frecuencia diferente de cero. */ #include #include #include void histograma( int , int , int **); int **read_matrix(int &, int &); void write_matrix(int , int, int **); using namespace std; int main() { int **matrix; int m, p; matrix = read_matrix(m, p); write_matrix(m, p, matrix); cout << "\nHistograma: " << endl; histograma (m,p,matrix); return 0; } int **read_matrix(int &row, int &col) { int **matrix=nullptr; cout << "Enter the number of rows and columns for the matrix: "; cin >> row >> col ; matrix = new int *[row]; for (int i = 0; i < row; i++) matrix[i] = new int [col]; cout << "Now enter the element for the matrix: " << endl; for (int i=0; i < row; i++) for (int j=0; j < col; j++) { cout << "Row " << (i+1) << " Col " << (j+1) << " : "; cin >> matrix[i][j]; } return matrix; } void write_matrix(int row, int col, int **matrix) { cout << "\nImagen:" << endl; for (int i=0; i < row; i++) { for (int j=0; j < col; j++) cout << matrix[i][j] << " "; cout << endl; } } void histograma( int m, int n, int **matrix) { const int max=256; int hist[max]; for (int i = 0; i < max;i++) hist[i]=0; for (int i = 0; i < m;i++) for (int j = 0; j < n; j++) hist[matrix[i][j]]++; for (int i = 0; i < max;i++) if (hist[i] != 0) cout << i << "\t" << hist[i] << endl; }