20140929 (C++ cout, cin, winapi로 영상 평활화 처리)

148일차














--------------

C++

--------------



우선 .cpp 소스 파일을 생성합니다.


1.



2.



3.



4.











화면에 글자를 출력해 보는 기본 소스부터 시작합니다.


소스)


#include <iostream>  // stdio.h -> iostream으로 바뀜


int main()

{

    std::cout << "Hello\n";  // printf -> std::cout 으로 바뀜, std::cout 은 객체입니다.


    return 0;

}








--- C++.....


- C++은 C를 포함하기 때문에 C 문법, 함수를 다 사용할 수 있습니다.

- 소스 중간에 변수를 선언하여 사용할 수 있다. (단, 중간에 선언한 변수는 그 위에서 사용 불가)

- std::cout은 객체입니다. (console out)



소스)


#include <iostream>


int main()

{

    std::cout << "hello\n";


    printf("C 문법\n");  // C 함수 사용 가능


    int iA = 100;  // 소스 중간에 변수 선언 가능


    std::cout << iA;  // %d등 서식 문자를 사용하지 않고 숫자를 간단히 출력

    std::cout << "\n";


    std::cout << iA << "\n";  // 뒤에 엔터 서식 문자를 넣을 수도 있다.

    std::cout << iA << std::endl;  // "\n" 대신 std::endl 이라는 것도 있다. 개인의 취향


    return 0;

}







linux에서도 실습해 보았습니다.






(g++이 설치되어 있지 않을 시 "sudo apt-get install g++" 치면 자동으로 설치, 설정이 된다.)






- MS Visual Studio는 확장자로 .c는 C,  .cpp는 C++로 사용하는데,

Linux, Unix에서는 .cpp, .c++, .cc등 으로 사용한다고 합니다.


- MS Visual Studio는 확장자로( .c,  .cpp ) 소스 파일을 구분하여 컴파일 하는 반면,

Linux, Unix 에서는 확장자로 소스 파일을 구분하지 않고, C는 gcc로,  C++은 g++로 컴파일 합니다.









--- C++...


- "std::cin >> 변수"   입력을 받아 변수에 넣습니다. std::cout << 이랑 삿갓이 반대 모양입니다.



소스)

#include <iostream>


int main()

{

    int dan;

    int su;


    std::cout << "단을 입력하세요 : ";

    std::cin >> dan;


    for(; 10 > dan; ++dan)

    {

        for(su = 1; 10 > su; ++su)

        {

            std::cout << dan << " * " << su << " = " << dan * su << std::endl;  // 입력 받은 단부터 구구단 출력

        }

        std::cout << std::endl;

    }


    char buf[128];

    int number;


    std::cout << "문자열, 숫자 입력 : ";

    std::cin >> buf >> number;  // 입력을 연속해서 받을 수 있다.


    std::cout << "문자열 : " << buf << std::endl;

    std::cout << "숫자 : " << number << std::endl;

    std::cout << "문자열 + 1: " << buf + 1 << std::endl;  // 문자열 변수에 +1을 하면 주소가 +1 되어 출력된다.


    return 0;

}















---------------

평활화

---------------



- 어둡게 촬영된 영상의 히스토그램을 조절하여 명암 분포가 빈약한 영상을 균일하게 만드는 기법


- 히스토그램 평활화 3단계

1. 명암값의 빈도수 수치 계산

(uiRcnt[], uiGcnt[], uiBcnt[] 이 배열들이 명암값 빈수도 계산된 값이다.)


2. 각 명암값 누적수 계산



3. 총 화소와 최대 명도값으로 계산

n[i] = sum[i] * ( 1 / (총화소) ) * (최대 밝기)





추가된 소스)


...

//전역 변수 선언

unsigned int uiRhisto[256];  // 평활화로 사용할 변수

unsigned int uiGhisto[256];  // 평활화로 사용할 변수

unsigned int uiBhisto[256];  // 평활화로 사용할 변수

...




...

//히스토그램 세로축 수치 값을 조정하는 소스 밑에 추가


for(uiXcount = 0; 256 > uiXcount; ++uiXcount)

{

if(uiXcount != 0)

{

uiRhisto[uiXcount] = ((uiRhisto[uiXcount-1] + uiRcnt[uiXcount]) * 255) / (uiX*uiY);

}

else

{

uiRhisto[uiXcount] = (uiRcnt[uiXcount] * 255) / (uiX*uiY);

}

}









설정

트랙백

댓글