ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20140929 (C++ cout, cin, winapi로 영상 평활화 처리)
    부산IT학원/스마트컨트롤러 2014. 9. 29. 11:30

    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);

    }

    }









Designed by Tistory.