「OpenCV에 의한 화상 처리 입문」연습 문제 4.2

13998 단어 이미지 처리OpenCV
「OpenCV에 의한 화상 처리 입문」 의 연습 문제 4.2를 했다.

연습 문제 4.2



1



2차원 배열 이미지를 사용하여 PGM 이미지를 만듭니다.

※main 함수에 매회 샘플 프로그램을 쓰면 장대해지기 때문에,
subX()의 함수를 만들어 적절히 main에서 부르는 구성으로 했다.

프로그램



sub6_1.cpp
#include "sub.h";

using namespace std;

int sub6()
{
    const int width = 9, height = 9;
    unsigned char image[height][width];

    string filename = "output.pgm";
    ofstream fout(filename);

    for (int y = 0;y < height;y++)
    {
        for (int x = 0;x < width;x++)
        {
            /* ここから作成開始 */
            int tmp = 32 * x + 32 * y;

            if (tmp < 256)
            {
                image[x][y] = tmp;
            }
            else if (tmp == 256)
            {
                image[x][y] = 255;
            }
            else if (tmp > 256)
            {
                image[x][y] = 256 - (tmp - 256);
            }
            /* ここまで */
        }
    }

    fout << "P2" << endl;
    fout << width << " " << height << endl;
    fout << "255" << endl;
    for (int y = 0;y < height;y++)
    {
        for (int x = 0;x < width;x++)
        {
            fout << (int)image[x][y] << " ";
        }
        fout << endl;
    }
    fout.flush();
    fout.close();

    return 0;

}

작성 파일



output.pgm
P2
9 9
255
0 32 64 96 128 160 192 224 255 
32 64 96 128 160 192 224 255 224 
64 96 128 160 192 224 255 224 192 
96 128 160 192 224 255 224 192 160 
128 160 192 224 255 224 192 160 128 
160 192 224 255 224 192 160 128 96 
192 224 255 224 192 160 128 96 64 
224 255 224 192 160 128 96 64 32 
255 224 192 160 128 96 64 32 0 

표시





2



1과 동일한 이미지를 1차원 배열 image를 사용하여 작성한다.

프로그램



sub6_2.cpp
#include "sub.h";
using namespace std;

int sub6()
{
    const int width = 9, height = 9;
    unsigned char image[height * width];

    string filename = "output.pgm";
    ofstream fout(filename);

    for (int y = 0; y < height; y++)
    {
        for (int x = 0; x < width; x++)
        {
            /* ここから作成開始 */
            int tmp = 32 * x + 32 * y;

            if (tmp < 256)
            {
                image[y*width+x] = tmp;
            }
            else if (tmp == 256)
            {
                image[y * width + x] = 255;
            }
            else if (tmp > 256)
            {
                image[y * width + x] = 256 - (tmp - 256);
            }
            /* ここまで */
        }
    }

    fout << "P2" << endl;
    fout << width << " " << height << endl;
    fout << "255" << endl;
    for (int y = 0;y < height;y++)
    {
        for (int x = 0;x < width;x++)
        {
            fout << (int)image[y*width + x] << " ";
        }
        fout << endl;
    }
    fout.flush();
    fout.close();

    return 0;

}

pgm 파일 및 이미지는 1과 같으므로 생략.

좋은 웹페이지 즐겨찾기