매일공부

이미지 처리 본문

임베디드 개발자/코딩

이미지 처리

임베디드초보자 2022. 1. 19. 21:18
#define _CRT_SECURE_NO_WARNINGS
using namespace std; // C++ 추가기능
#include <string>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
//선언부

const int ROW = 8, COL = 8;//행과 열 변수 선언
unsigned char m_image[ROW][COL];//8*8의 2차 배열 선언

void printImage() {
	// 2*2배열을 출력한다.
	for (int i = 0; i < ROW; i++) {
		for (int k = 0; k < COL; k++) {
			printf("%3d ", m_image[i][k]);
		}
		printf("\n");
	}
	printf("\n");

}//2차 배열을 출력하는 부분

int main() {

	// 이미지 배열을 초기화 시키기
	for (int i = 0; i < ROW; i++)
		for (int k = 0; k < COL; k++)
			m_image[i][k] = 0;//배열을 전부 0으로 초기화 시킨다.


	// 이미지 파일 --> 배열  Loading
	unsigned char pixel; // 이미지의 한 점의 값 (0~255)
	srand(time(NULL)); // 랜덤 초기화

	//pixel 이라는 2차 배열에 숫자들을 집어 넣어줌
	for (int i = 0; i < ROW; i++)
		for (int k = 0; k < COL; k++) {
			pixel = rand() % 256; // 랜덤은 아무 숫자나 들어가지만 256으로 나누어 몫을 취함으로서 0~255까지의 숫자만 pixel에 들어간다.
			m_image[i][k] = pixel;
		}//배열에 0~ 255까지의 랜덤 숫자를 집어 넣는다.

	printImage();

	////////  영상 처리 ///////////
	/// (1) 영상을 밝게 처리 --> 값을 증가 (50)
	int value = 50;//증가할 값
	for (int i = 0; i < ROW; i++) {
		for (int k = 0; k < COL; k++) {
			int px = m_image[i][k] + value;//각 값에 50을 더한다.
			
			//이때 우리가 선언한 unsigned char은 255 이상의 숫자를 출력할 수 없다. 
			if (px > 255)
				m_image[i][k] = 255;
			else
				m_image[i][k] += value;
		}
	}

	// 이미지를 화면 출력
	// 2*2배열을 출력한다.
	for (int i = 0; i < ROW; i++) {
		for (int k = 0; k < COL; k++) {
			printf("%3d ", m_image[i][k]);
		}
		printf("\n");
	}
	printf("\n");

	//-100
	int mavalue = 100;
	for (int i = 0; i < ROW; i++) {
		for (int k = 0; k < COL; k++) {
			int px = m_image[i][k] - mavalue;
			if (px < 0)
				m_image[i][k] = 0;
			else
				m_image[i][k] -= mavalue;
		}
	}

	// 이미지를 화면 출력
	printImage();




	//반전하기///////////////////////////////////////////////////
	////////////////////////////////////////////////////
	int banvalue = 255;
	for (int i = 0; i < ROW; i++) {
		for (int k = 0; k < COL; k++) {
			m_image[i][k]=255- m_image[i][k];
		}
	}

	// 이미지를 화면 출력
	printImage();



	///////////흑백처리/////////////////////
	///////////흑백처리/////////////////////
///////////흑백처리/////////////////////

	int bvalue = 128;
	for (int i = 0; i < ROW; i++) {
		for (int k = 0; k < COL; k++) {
			int px1 = m_image[i][k] - bvalue;

			if (px1 >= 0)
				m_image[i][k] = 255;
			else
				m_image[i][k] = 0;
		}
	}

	// 이미지를 화면 출력
	printImage();


	///////////좌우/////////////////////
	///////////좌우/////////////////////
///////////좌우/////////////////////

	for (int i = 0; i < ROW; i++) {
		for (int k = 0; k < COL; k++) {
			printf("%3d ", m_image[i][COL-1-k]);
		}
		printf("\n");
	}
	printf("\n");

	///////////상하/////////////////////
///////////상하/////////////////////
///////////상하/////////////////////

	for (int i = 0; i < ROW; i++) {
		for (int k = 0; k < COL; k++) {
			printf("%3d ", m_image[COL-1-i][k]);
		}
		printf("\n");
	}
	printf("\n");

	printImage();


}