gray_dilation_shape(m_hoSource, &ImageMax, 1.5, 1.5, "rectangle");              // Gray Level 확장

threshold(ImageMax, &Region, 140, 255);                                         // Threshold 찾기

connection(Region, &ConnectedRegions);                                          // 지정영역연결

HTuple lStart[2], lLast[2];                                                    // 영역지정값    

// 찾을영역지정

lStart[0] = (m_htImgWidth  / 2) - (lTipRgnWidth  * 0.5 * PIXEL_UNIT_ANTI);      // 좌상단 위치 지정 (가로)

lStart[1] = (m_htImgHeight / 2) - (lTipRgnHeight * 0.5 * PIXEL_UNIT_ANTI);      // 좌상단 위치 지정 (세로)

lLast[0]  = (m_htImgWidth  / 2) + (lTipRgnWidth  * 0.5 * PIXEL_UNIT_ANTI);      // 우하단 위치 지정 (가로)

lLast[1]  = (m_htImgHeight / 2) + (lTipRgnHeight * 0.5 * PIXEL_UNIT_ANTI);      // 우하단 위치 지정 (세로)

// 중심을 기준으로 검사 영역 설정

clip_region(ConnectedRegions, &RegionClipped, lStart[1],lStart[0],lLast[1],lLast[0]);  

select_shape(ConnectedRegions, &SelectedRegions1, "width", "and",10, 55);       // 지정크기영역만찾기(너비)

select_shape(SelectedRegions1, &SelectedRegions2, "height", "and",10, 55);      // 지정크기영역만찾기(높이)

select_shape(SelectedRegions2, &RegionTrans, "area", "and",100, 2700);          // 지정크기영역만찾기(영역)

shape_trans(SelectedRegions, &RegionTrans, "rectangle1");                       // 영역을변경

 

// 이하 이부분은 동일함 어차피 한 개의 영역만 구하고 화면 표시하는 부분이므로..

count_obj(RegionTrans, &SelectNum);                                             // 구한 영역 개수 구하기

long nNum;

tuple_int(SelectNum, &nNum);                                                    // 구한 개수를 일반 상수로 변경

// 구한 개수가 하나일 경우에만 다음과 같이 처리 하나 이상일 경우 에러 처리

HTuple X,Y, HalfX, HalfY;

area_center(RegionTrans, &Area, &Row, &Column);                                 // 구한 영역 중심값 구하기

// 영역 계산부분

// 현재 구한 부분을 전체 길이의 절반으로 뺀값이 중심부터 떨어진 값임

X = Column - (m_htImgWidth * 0.5);                                              // 가로축의 부분 계산

Y = Row - (m_htImgHeight * 0.5);                                                // 세로축 부분 계산

tuple_int(X, &lWidth);                                                          // 구한 값을 일반 상수로 변경

tuple_int(Y, &lHeight);

// 구한 결과값을 픽셀당 유니트 크기로 계산하기

nResultX = lWidth  * PIXEL_UNIT;                                                // PIXEL_UNIT은 미리 정의함

nResultY = lHeight * PIXEL_UNIT;

set_color(m_htDisp, "red");                                                     // 표시색상

set_tposition(m_htDisp, 10, 10);//nZoomScale + 10, nZoomScale + 10);            // 텍스트 표시 위치 설정

write_string(m_htDisp, "X : " + nResultX + " Y : " + nResultY);                 // 결과값표시

// 구한 영역을 외곽선만 표시함

set_line_width(m_htDisp, 1);                                                    // 굵기선택

set_draw(m_htDisp, "margin");                                                   // 외곽만표시

set_color(m_htDisp, "blue");                                                   // 표시색상 변경

disp_obj(RegionTrans, m_htDisp);                                               // 영역그리기

* 십자 마크 중심에서 떨어진 값 구하기

gray_dilation_shape(m_hoSource, &ImageMax, 1.5, 1.5, "rectangle");              // Gray Level 확장

threshold(ImageMax, &Region, 200, 255);                                         // Threshold 찾기

connection(Region, &ConnectedRegions);                                          // 지정영역연결

select_shape(ConnectedRegions, &SelectedRegions1, "width", "and",300, 400);     // 지정크기영역만찾기(너비)

select_shape(SelectedRegions1, &SelectedRegions2, "height", "and",300, 400);    // 지정크기영역만찾기(높이)

select_shape(SelectedRegions2, &RegionTrans, "area", "and",50000, 100000);      // 지정크기영역만찾기(영역)

shape_trans(SelectedRegions, &RegionTrans, "rectangle1");                       // 영역을변경

 

// 이하 이부분은 동일함 어차피 한 개의 영역만 구하고 화면 표시하는 부분이므로..

count_obj(RegionTrans, &SelectNum);                                             // 구한 영역 개수 구하기

long nNum;

tuple_int(SelectNum, &nNum);                                                    // 구한 개수를 일반 상수로 변경

// 구한 개수가 하나일 경우에만 다음과 같이 처리 하나 이상일 경우 에러 처리

HTuple X,Y, HalfX, HalfY;

area_center(RegionTrans, &Area, &Row, &Column);                                 // 구한 영역 중심값 구하기

// 영역 계산부분

// 현재 구한 부분을 전체 길이의 절반으로 뺀값이 중심부터 떨어진 값임

X = Column - (m_htImgWidth * 0.5);                                              // 가로축의 부분 계산

Y = Row - (m_htImgHeight * 0.5);                                                // 세로축 부분 계산

tuple_int(X, &lWidth);                                                          // 구한 값을 일반 상수로 변경

tuple_int(Y, &lHeight);

// 구한 결과값을 픽셀당 유니트 크기로 계산하기

nResultX = lWidth  * PIXEL_UNIT;                                                // PIXEL_UNIT은 미리 정의함

nResultY = lHeight * PIXEL_UNIT;

set_color(m_htDisp, "red");                                                     // 표시색상

set_tposition(m_htDisp, 10, 10);//nZoomScale + 10, nZoomScale + 10);            // 텍스트 표시 위치 설정

write_string(m_htDisp, "X : " + nResultX + " Y : " + nResultY);                 // 결과값표시

// 구한 영역을 외곽선만 표시함

set_line_width(m_htDisp, 1);                                                    // 굵기선택

set_draw(m_htDisp, "margin");                                                   // 외곽만표시

set_color(m_htDisp, "blue");                                                   // 표시색상 변경

disp_obj(RegionTrans, m_htDisp);                                               // 영역그리기

* 사각형 마크 중심에서 떨어진 값 구하기

gray_dilation_shape(m_hoSource, &ImageMax, 1.5, 1.5, "rectangle");              // Gray Level 확장

threshold(ImageMax, &Region, 0, 75);                                            // Threshold 찾기

connection(Region, &ConnectedRegions);                                          // 지정영역연결

select_shape(ConnectedRegions, &SelectedRegions1, "width", "and",140, 205);     // 지정크기영역만찾기(너비)

select_shape(SelectedRegions1, &SelectedRegions2, "height", "and",140, 205);    // 지정크기영역만찾기(높이)

select_shape(SelectedRegions2, &RegionTrans, "area", "and",20000, 40000);       // 지정크기영역만찾기(영역)

 

// 이하 이부분은 동일함 어차피 한 개의 영역만 구하고 화면 표시하는 부분이므로..

count_obj(RegionTrans, &SelectNum);                                   

         // 구한 영역 개수 구하기

long nNum;

tuple_int(SelectNum, &nNum);                                                    // 구한 개수를 일반 상수로 변경

// 구한 개수가 하나일 경우에만 다음과 같이 처리 하나 이상일 경우 에러 처리

HTuple X,Y, HalfX, HalfY;

area_center(RegionTrans, &Area, &Row, &Column);                                 // 구한 영역 중심값 구하기

// 영역 계산부분

// 현재 구한 부분을 전체 길이의 절반으로 뺀값이 중심부터 떨어진 값임

X = Column - (m_htImgWidth * 0.5);                                              // 가로축의 부분 계산

Y = Row - (m_htImgHeight * 0.5);                                                // 세로축 부분 계산

tuple_int(X, &lWidth);                                                          // 구한 값을 일반 상수로 변경

tuple_int(Y, &lHeight);

// 구한 결과값을 픽셀당 유니트 크기로 계산하기

nResultX = lWidth  * PIXEL_UNIT;                                                // PIXEL_UNIT은 미리 정의함

nResultY = lHeight * PIXEL_UNIT;

set_color(m_htDisp, "red");                                                     // 표시색상

set_tposition(m_htDisp, 10, 10);//nZoomScale + 10, nZoomScale + 10);            // 텍스트 표시 위치 설정

write_string(m_htDisp, "X : " + nResultX + " Y : " + nResultY);                 // 결과값표시

// 구한 영역을 외곽선만 표시함

set_line_width(m_htDisp, 1);                                                    // 굵기선택

set_draw(m_htDisp, "margin");                                                   // 외곽만표시

set_color(m_htDisp, "blue");                                                   // 표시색상 변경

disp_obj(RegionTrans, m_htDisp);                                               // 영역그리기

* Frame Grabber 정의 및 열기

사용 함수 원형

open_framegrabber (Name, HorizontalResolution, VerticalResolution, ImageWidth, ImageHeight, StartRow, StartColumn, Field, BitsPerChannel, ColorSpace, Generic, ExternalTrigger, CameraType, Device, Port, LineIn : AcqHandle )

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Name

이미지 인터페이스 명

File’

'Ginga++', 'TAG', 'TWAIN', .....

HorizontalResolution, VerticalResolution

원하는 이미지를 수집하는 해상도

1

1, 2, 4, 1600, 1280, 768, 640, 384, 320, 192, 160, -1

ImageWidth, ImageHeight

수집하는 이미지의 반환 크기

0

0, -1

StartRow, StartColumn

이미지 시작 위치

0

0, -1

Field

수집할 이미지 면적

‘default’

'first', 'second', 'next', 'interlaced', 'progressive'

BitsPerChannel

비트당 이미지 픽셀 수

-1

5, 8, 10, 12, 14, 16, -1

ColorSpace

이미지의 출력 색상 형식

‘default’

'gray', 'raw', 'rgb', 'yuv'

Generic

일반 매개 변수 특정 쿼리 사용시만

-1

 

ExternalTrigger

외부 트리거링 사용 여부

‘default’

'true', 'false', 'default'

CameraType

카메라 스펙

‘default’

'ntsc', 'pal', 'auto'

Device

이미지 수집 장치의 이름

-1

‘-1', '0', '1', '2', '3'

Port

이미지 수집 연결 포트 번호

-1

0,1,2,3,-1

LineIn

입력 라인(사용 될 경우만 사용)

-1

1, 2, 3, 4, -1

AcqHandle

그래버에 할당할 핸들 번호

 

 

 

사용 예시

// Select a suitable image acquisition interface name AcqName
info_framegrabber(AcqName,'port',Information,Values)
// Choose the port P and the input line L your camera is connected to
open_framegrabber(AcqName,1,1,0,0,0,0,'default',-1,'default',-1.0,
                  'default','default','default',P,L,AcqHandle)
grab_image(Image,AcqHandle) 
close_framegrabber(AcqHandle)

 


 

* Frame Grabber 닫기

사용 함수 원형

close_all_framegrabbers();         모든 Frame Grabber를 닫는다

close_framegrabber(Acq Handle);      지정 Frame Grabber를 닫는다

 

매개변수 설명

B/D 핸들 or 매개변수 없음

 

사용 예시

close_all_framegrabbers();        

close_framegrabber(m_htAcqHandle);

 

* 이미지 채널별 접근

사용 함수 원형

get_image_pointer1 (Image, Pointer, Type, Width, Height)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Image

입력 이미지

File’

'Ginga++', 'TAG', 'TWAIN', .....

Pointer

수집된 이미지 데이터 포인터

없음

 

Type

이미지 타입

없음

int1, int2, uint2, int4, byte, rea', direction, cyclic, complex,  vector_field

Width, Height 

수집된 이미지 크기

0

0, -1

 

사용 예시

Hobject  Bild;
char     typ[128];
long     width,height;
unsigned char *ptr;
 
read_image(&Bild,"fabrik");
get_image_pointer1(Bild,(long*)&ptr,typ,&width,&height);

 

* 이미지 불러오기 (Grabber B/D 이용)

사용 함수 원형

grab_image (Image, Acq Handle)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Image

입력 이미지 저장값

없음

 

Acq Handle

Grabber B/D Handle

없음

 

 

사용 예시

// Select a suitable image acquisition interface name AcqName

info_framegrabber(AcqName,'port',Information,Values);

// Choose the port P and the input line L your camera is connected to

open_framegrabber(AcqName,1,1,0,0,0,0,'default',-1,'default',-1.0,

                  'default','default','default',P,L,AcqHandle);

grab_image(Image,AcqHandle);

close_framegrabber(AcqHandle);

 


 

* 이미지 불러오기 (File 불러오기 이용)

사용 함수 원형

read_image (Image, Filename)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Image

입력 이미지

없음

 

Filename

불러올 이미지 명

fabrik

monkey, fabrik, mreut

 

사용 예시

/* Reading an image: */

  read_image(Image,'monkey');

 

/* Reading 3 images into an image array: */

  read_image(Images,['ic_0','ic_1','ic_2']);

 

/* Setting of search path for images on '/mnt/images' and '/home/images': */

  set_system('image_dir','/mnt/images:/home/images');

 

* 이미지 저장하기

사용 함수 원형

read_image (Image, Format , FillColor, Filename)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Image

저장할 이미지

없음

 

Format

저장 형식

tiff

tiff, bmp, jpeg, ima, jpeg 100, jpeg 80, jpeg 60, jpeg 40, jpeg 20, jp2, jp2 50, jp2 40, jp2 30, jp2 20, png, png best, png fastest, png none

FillColor

픽셀당 채울 그레이 값

0

-1, 0, 255, 0xff0000, 0xff00

Filename

저장할 파일명

 

 

 

사용 예시

write_image(m_hoSource, "bmp", 0, a_Path.GetBuffer(0));

 

 


 

* 이미지 표시 영역 설정하기

사용 함수 원형

set_part (Window Handle, Row1, Column1, Row2, Column2)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Window Handle

표시할 윈도우 핸들 값

 

Long type

Row1, Column1

이미지 좌 상단 위치

0

 

Row2, Column2

이미지 우 하단 위치

512

Row2 >= Row1,
Column2 >= Column1

 

사용 예시

get_system('width',,Width);

get_system('height',Height);

set_part(WindowHandle,0,0,Height-1,Width-1);

disp_image(Image,WindowHandle);

draw_rectangle1(WindowHandle:Row1,Column1,Row2,Column2);

set_part(WindowHandle,Row1,Column1,Row2,Column2);

disp_image(Image,WindowHandle);

 

 

* 이미지 표시하기

사용 함수 원형

disp_obj (Image, Window Handle)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Image

표시할 이미지

없음

 

Window Handle

표시할 윈도우 핸들값

없음

 

 

사용 예시

/* Output of a gray image: */

read_image(Image1,'affe');

disp_obj(Image1, WindowHandle);

threshold(Image, Region, 0, 128);

disp_obj(Region, WindowHandle);

 


 

* 이미지 회전하기

사용 함수 원형

rotate_image (Input Image, Rotate Image, Phi, Interpolation)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Input Image

회전할 원 이미지

없음

 

Rotate Image

회전된 이미지

없음

 

Phi

회전 각도

90

90,180,270

Interpolation

보간 방법

constant

None, constant, weighted

 

사용 예시

read_image(Image,'monkey');

disp_image(Image,WindowHandle);

rotate_image(Image, RotImage, 270, ‘constant’);

disp_image(RotImage,WindowHandle);

 

 

* 표시된 이미지 정리하기

사용 함수 원형

clear_window (Window Handle)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Window Handle

표시할 윈도우 핸들값

없음

 

 

사용 예시

clear_window(WindowHandle);

 

* 표시할 윈도우 열기

사용 함수 원형

open_window (Row, Column, Width, Height, FatherWindow, Mode, Machine, Window Handle)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Row, Column

좌 상단 구석 위치

0

0 <= Row, 0 <= column

Width, Height

우 하단 구석 위치

256

0 <= Width, 0 <= Height

FatherWindow

부모 윈도우 값

0

 

Mode

윈도우 모드

vivisble

Visible, invisible, transparent, buffer

Machine

 

NULL

 

Window Handle

표시할 윈도우 핸들값

없음

 

 

사용 예시

open_window(0,0,400,-1,'root','visible','',WindowHandle);

read_image(Image,'fabrik');

disp_image(Image,WindowHandle);

write_string(WindowHandle,'File, fabrik.ima');

new_line(WindowHandle);

get_mbutton(WindowHandle,_,_,_);

set_lut(WindowHandle,'temperature');

set_color(WindowHandle,'blue');

write_string(WindowHandle,'temperature');

new_line(WindowHandle);

write_string(WindowHandle,'Draw Rectangle');

new_line(WindowHandle);

draw_rectangle1(WindowHandle,Row1,Column1,Row2,Column2);

set_part(Row1,Column1,Row2,Column2);

disp_image(Image,WindowHandle);

new_line(WindowHandle);

 


 

* 사용할 폰트 설정

사용 함수 원형

set_font(Window Handle, Font)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Window Handle

표시할 윈도우 핸들값

없음

Window Handle

Font

폰트 쿼리 값

없음

 

 

사용 예시

get_system ('operating_system', OS)

if (OS{0:2} = 'Win')

  set_font (WindowHandle, '-Courier New-18-*-*-*-*-1-')

else

  set_font (WindowHandle, '-*-courier-bold-r-normal--22-*-*-*-*-*-iso8859-1')

 

 

 

 


 

* 그레이 레벨 확장하기 (Opening과 비슷) –구멍 늘리기

사용 함수 원형

gray_dilation_shape(Hobject Image, Hobject *ImageMax, const HTuple &MaskHeight,
const HTuple &MaskWidth,const HTuple &MaskShape
)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Image

변환할 이미지 포인터

 

 

ImageMax

변환된 이미지가 저장될 곳

 

 

MaskHeight

마스크 가로 크기

11

3, 5, 7, 9, 11, 13, 15

MaskWidth

마스크 세로 크기

11

3, 5, 7, 9, 11, 13, 15

MaskShape

마스크 형태

‘Octagon’

'rectangle', 'rhombus', 'octagon'

 

사용 예시

gray_dilation_shape(m_hoSource, &ImageMax, 1.5, 1.5, "rectangle");    

 

 

 

* 그레이 레벨 축소하기 (Closing과 비슷) – 구멍 메우기

사용 함수 원형

gray_erosion_shape(Hobject Image, Hobject *ImageMax, const HTuple &MaskHeight,
const HTuple &MaskWidth,const HTuple &MaskShape
)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Image

변환할 이미지 포인터

 

 

ImageMax

변환된 이미지가 저장될 곳

 

 

MaskHeight

마스크 가로 크기

11

3, 5, 7, 9, 11, 13, 15

MaskWidth

마스크 세로 크기

11

3, 5, 7, 9, 11, 13, 15

MaskShape

마스크 형태

‘Octagon’

'rectangle', 'rhombus', 'octagon'

 

사용 예시

gray_erosion_shape(m_hoSource, &ImageMax, 1.5, 1.5, "rectangle");


 

* 경계 값으로 새 영역 구하기

사용 함수 원형

threshold (Image, Region, MinGray, MaxGray);

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Image

변환할 이미지

 

 

Region

경계선으로 구한 영역

 

 

MinGray

경계 값을 구할 최소값

128.0

0.0, 10.0, 30.0, 64.0, 128.0, 200.0, 220.0, 255.0

MaxGray

경계 값을 구할 최대값

255.0

0.0, 10.0, 30.0, 64.0, 128.0, 200.0, 220.0, 255.0

 

사용 예시

#include "HIOStream.h"

#if !defined(USE_IOSTREAM_H)

using namespace std;

#endif

#include "HalconCpp.h"

 

int main (int argc, char *argv[])

{

  if (argc != 4)

  {

    cout << "Usage : " << argv[0] << " 'image' MinGray MaxGray" << endl;

    return (-1);

  }

  HImage   image (argv[1]), Sobel;

  HWindow  win;

image.Display (win);

 

  int MinGray = atoi (argv[2]);

  int MaxGray = atoi (argv[3]);

 

  Sobel = image.SobelAmp ("sum_abs", 3);

 

  HRegionArray rand  = ((image >= MinGray) & (image <= MaxGray)).Skeleton();

  HRegionArray lines = rand.Connection();

  HRegionArray edges = lines.SelectShape("area", "and", 10.0, 10000000.0);

  edges.Display (win);

  win.Click ();

  return (0);

}


 

* 두 영역 합치기

사용 함수 원형

connection(Region, &ConnectedRegions);          

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Region

입력되는 영역값

 

 

ConnectedRegions

합칠 영역값

 

 

 

사용 예시

#include "HIOStream.h"

#if !defined(USE_IOSTREAM_H)

using namespace std;

#endif

#include "HalconCpp.h"

 

int main (int argc, char *argv[])

{

  HImage   image (argv[1]);

  HWindow  w;

  w.SetColored(12);

  HRegion Light = image >= 128;

  Light.Display(w);

  HRegionArray Many = Light.Connection();

  cout << "Nummber of regions after threshold = " << Many.Num();

  Many.Display(w);

}

 

* 일부 영역 선택하기

사용 함수 원형

select_shape(Hobject Regions, Hobject* SelectedRegions, const HTuple& Features, const HTuple& Operation, const HTuple& Min, const HTuple& Max)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Regions

선택할 영역

 

 

SelectedRegions

선택된 영역

 

 

Features

선택할 방법

"area"

"area", "row", "column", "width", "height", "row1", "column1", "row2", "column2", "circularity", "compactness", "contlength", "convexity", "rectangularity", "ra", "rb", "phi", "anisometry", "bulkiness", "struct_factor", "outer_radius", "inner_radius", "inner_width", "inner_height", "max_diameter", "dist_mean", "dist_deviation", "roundness", "num_sides", "orientation", "connect_num", "holes_num", "area_holes", "euler_number", …

Operation

집합 조건

"and"

"and", "or"

Min

선택할 최소 조건

150.0

0.0 ≤ Min ≤ 99999.0

Max

선택할 최대 조건

99999.0

0.0 ≤ Max ≤ 99999.0

 

사용 예시

#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
#include "HalconCpp.h"
 
int main ()
{
  HImage        img ("affe");
  HWindow       w;
  HRegionArray  reg  = img.Regiongrowing (3, 3, 5, 0);
  HRegion       circ = HRegion::GenCircle (100, 100, MinRadius);
  HRegionArray  seg  = reg.SelectShapeProto (circ, "fits", 0, 0);
  seg.Display (w);
  w.Click ();
  return(0);
} 

* 지정 영역을 원하는 형태로 변경하기

사용 함수 원형

shape_trans(Hobject Region, Hobject* RegionTrans, const HTuple& Type)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Region

바꾸자 하고자 하는 영역

 

 

RegionTrans

바꾼 후 영역

 

 

Type

영역을 변경할 모양

"convex"

"convex", "ellipse", "outer_circle", "inner_circle", "rectangle1", "rectangle2", "inner_rectangle1", "inner_center"

 

사용 예시

shape_trans(SelectedRegions, &RegionTrans, "rectangle1");                                           // 영역을변경


 

* 영역 일부 선택

사용 함수 원형

clip_region(Hobject Region, Hobject* RegionClipped, const HTuple& Row1, const HTuple& Column1, const HTuple& Row2, const HTuple& Column2)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Region

선택하고자 하는 원 영역

 

 

RegionClipped

선택된 영역이 저장될 곳

 

 

Row1

자르고자 하는 좌측 Y 위치

0

0, 128, 200, 256

Column1

자르고자 하는 좌측 X 위치

0

0, 128, 200, 256

Row2

자르고자 하는 우측 Y 위치

256

128, 200, 256, 512

Column2

자르고자 하는 우측 X 위치

256

128, 200, 256, 512

 

사용 예시

clip_region(ConnectedRegions, &RegionClipped, 478, 578, 640, 796);                                // 찾을영역지정


 

* 구한 영역 개수 구하기

사용 함수 원형

count_obj(Hobject Objects, Hlong* Number)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Objects

영역 개수 구할 목표 영역

 

 

Number

구한 영역 개수가 저장될 곳

없음

 

 

사용 예시

count_obj(RegionTrans, &SelectNum);                                                // 영역 개수 구하기

 

 

* 자료형 변경하기

사용 함수 원형

tuple_int(const HTuple& T, Hlong* Int)   // 정수형

tuple_abs(const HTuple& T, double* Abs) // 절대값 나머지 실수도 이런 식의 함수를 사용

 

매개변수 설명

매개 변수

설명

기본값

권장 값

T

변환할 값

 

 

Int

변환 된 값이 저장 될 곳

 

 

 

사용 예시

tuple_int(SelectNum, &nNum);                                                       // 자료형 변경

 

 


 

* 라인 굵기 설정

사용 함수 원형

set_line_width(const HTuple& WindowHandle, const HTuple& Width)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

WindowHandle

라인 굵기 지정할 윈도우 핸들

 

 

Width

라인 굵기 값

1

(Width>=1) && (Width<=2000)

 

사용 예시

set_line_width(m_htDisp, 1);                                                                      // 선굵기

 

 

* 표시 색상 설정하기

사용 함수 원형

set_color(const HTuple& WindowHandle, const HTuple& Color)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

WindowHandle

윈도우 핸들

 

 

Color

표시할 색상

"white"

"black", "white", "red", "green", "blue", "cyan", "magenta", "yellow", "dim gray", "gray", "light gray", "medium slate blue", "coral", "slate blue", "spring green", "orange red", "orange", "dark olive green", "pink", "cadet blue"

사용 예시

set_color(WindowHandle,['red','green'])

disp_circle(WindowHandle,[100,200,300],[200,300,100],[100,100,100])

 

* 영역 표시 방법 설정

사용 함수 원형

set_draw(const HTuple& WindowHandle, const HTuple& Mode)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

WindowHandle

윈도우 핸들

 

 

Mode

영역 채우기 모드

"fill"

"fill", "margin"

 

사용 예시

set_draw(m_htDisp, "margin");                                              // margin 외곽만표시<-> fill (내부 칠하기)


 

* 영역 중심 구하기

사용 함수 원형

area_center(Hobject Regions, Hlong* Area, double* Row, double* Column)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

Regions

중심 값을 구하고자 하는 영역

 

 

Area

구한 중심 값이 저장될 영역

 

 

Row

중심값 세로 값이 저장될 공간

 

 

Column

중심값 가로 값이 저장될 공간

 

 

 

사용 예시

#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
#include "HalconCpp.h"
main()
{
  Tuple   area, row, column;
  HImage   img ("affe");
  HWindow  w;
  img.Display (w);
  w.Click ();
  HRegionArray   reg = (img >= 164).Connection ();
  reg.Display (w);
  w.Click ();
  area = reg.AreaCenter (&row, &column);
  for (int i = 0; i < reg.Num (); i++)
  {
    cout << "Row    [" << i << "]" << "= " << row[i].D ();
    cout << "\t\tColumn [" << i << "]" << "= " << column[i].D () << endl;
  }
  cout << "Total number of regions: " << reg.Num () << endl;
  return(0);
}

 

* 텍스트 위치 설정하기

사용 함수 원형

set_tposition(const HTuple& WindowHandle, const HTuple& Row, const HTuple& Column)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

WindowHandle

윈도우 핸들

 

 

Row

표시할 세로 위치

24

 

Column

표시할 가로 위치

12

 

 

사용 예시

set_tposition(m_htDisp, nZoomScale + 10, nZoomScale + 10);                        // 텍스트 표시 위치 설정

 

* 텍스트 쓰기

사용 함수 원형

write_string(const HTuple& WindowHandle, const HTuple& String)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

WindowHandle

윈도우 핸들

 

 

String

표시될 텍스트 값

"hello"

 

 

사용 예시

write_string(m_htDisp, "Left Camera 검사오류");                                              // 텍스트 표시 하기


 

* 사각영역 표시하기

사용 함수 원형

disp_rectangle1(const HTuple& WindowHandle, const HTuple& Row1, const HTuple& Column1, const HTuple& Row2, const HTuple& Column2)

 

매개변수 설명

매개 변수

설명

기본값

권장 값

WindowHandle

윈도우 핸들

 

 

Row1

좌 상단 세로 값

16

0, 64, 128, 256, 511

Column1

좌 상단 가로 값

16

0, 64, 128, 256, 511

Row2

우 하단 세로 값

48

0, 64, 128, 256, 511

Column2

우 하단 가로 값

48

0, 64, 128, 256, 511

 

사용 예시

set_color(WindowHandle,'green')

draw_region(MyRegion,WindowHandle)

smallest_rectangle1(MyRegion,R1,C1,R2,C2)

disp_rectangle1(WindowHandle,R1,C1,R2,C2).

Halcon 설치시 유의 사항

1. 사용 목적에 적합한 옵션을 선택
- full : 개발 버전 설치 시 전체 설치
- compact : 개발 버전 설치 시 일부만 설치 (예제 이미지 등은 설치 안됨에 유의)
- demo : 데모 버전 설치 시
- runtime : 런타임 버전 설치 시

2. 설치될 PC의 사양에 맞게 설치함
- SSE 또는 SSE2 : HALCON 설치 시 해당 PC의 CPU가 SSE 또는 SSE2를 지원여부에 따라 설치

3. 나머지는 그대로 설치하면 됨


 * Halcon 라이선스 설치
1. Halcon 설치시 라이선스 동글에 따라 맞는 버전을 선택하여 라이선스 동글 드라이버 설치
2. 라이선스 동글을 해당 단자(패러렐의 경우 프린터 포트에 USB에 경우 USB에)에 장착
3. 라이선스 파일을 C:\Program File\MVTec\Halcon\license 밑에 해당 라이선스 파일을 복사
4. Hdevelop를 실행시 정상적으로 실행되는지 확인


* 할콘 라이브러리 헤더 파일 정의

C++에서 사용할 경우 HalconCpp.h 을 사용하고자 하는 곳에 추가
C에서 사용할 경우에는 HalconC.h 를 사용

Ex) #include "HalconCpp.h" – C++
#include "HalconC.h" – C


* MFC에서 할콘 라이브러리 기본 설정 방법

1. 상위에 네임 스페이스를 정의함
using namespace Halcon;

2. 구성 속성을 아래와 같이 변경

* C/C++/일반 부분중 추가 포함 디렉터리 부분을 다음과 같이 변경
"$(HALCONROOT)\include";"$(HALCONROOT)\include\cpp"

* 링커/일반 부분 중 증분 링크 사용과 추가 라이브러리 디렉터리 부분을 다음과 같이 변경
증분 링크 사용과  - 예(/INCREMENTAL)
추가 라이브러리 디렉터리 - "$(HALCONROOT)/lib/$(HALCONARCH)"

* 링커/입력에서 추가 종속성 부분을 다음과 같이 변경
halconcpp.lib or parhalconcpp.lib


한 PC에 두개이상의 버전 설치 방법은 아래 첨부 문서를 참고


[원문주소] http://cbuilder.borlandforum.com/impboard/impboard.dll/trackback?sn=97053
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_faq&no=108
Delphi 로 된 Component 를 설치하다 보면 Dsgnintf.dcu 또는 Designintf.dcu 를 찾을 수 없다는
에러 메시지를 보게 됩니다. 이 에러 메시지가 나는 이유는 무엇일까요?

Component 에는 Design Time 에서 사용하기 쉽도록 Component Editor, Property Editor 가
포함되어 있는 경우가 있습니다. Delphi 에서 Design Time 에 필요한 Component Editor, Property Editor 를
사용하기 위해서는 uses 부분에 Designintf 또는 Dsgnintf 를 사용해야 합니다. 어떤 것을 사용할지는
Delphi 버전에 따라 다르겠지요. Delphi 6 이후부터는 Designintf 를 사용합니다.

C++Builder 에서 사용할 경우 약간 까다로운 문제가 발생합니다.
C++Builder 에는 Delphi Compiler 인 dcc32.exe 와 C++ Compiler 인 bcc32.exe 가 공존합니다.
따라서 패키지 파일인 bpk 파일에 두개의 컴파일러를 위한 옵션이 따로 있습니다.

bpk 를 텍스트 에디터로 열어서 그 내용을 보면 다음과 같은 항목이 있습니다.

<CFLAG1 value="-Od -H=$(BCB)\lib\vcl60.csm -Hc -Vx -Ve -X- -r- -a8 -b- -k -y -v -vi- -c
      -tWM"/>
<PFLAGS value="-$YD -$W -$O- -$A8 -v -JPHNE -M"/>


CFLAG1 은 C++ Compiler 인 bcc32.exe 를 위한 옵션입니다.
PFLAGS 는 Delphi Compiler 인 dcc32.exe 를 위한 옵션입니다.

Component 를 C++Builder 로 만들었다면 PACKAGES value 값에 designide.bpi 가 포함됩니다.
<PACKAGES value="rtl.bpi ApLabel_bcb6.bpi designide.bpi vcl.bpi vcljpg.bpi"/>


Delphi 로 Component 를 만들었다면 문제가 발생합니다. Delphi Compiler 인 dcc32.exe 에
designide 패키지를 사용하겠다는 것을 알려주어야 됩니다. 그런데 얄밉게도 Builder 가 알아서
처리하지 못합니다. 따라서 사용자가 수동으로 처리를 해주어야 합니다.

dcc32.exe 의 옵션을 보면 -LU 라는 옵션이 있습니다. 패키지를 사용하겠다는 것을 알려주는
옵션입니다. 이 옵션을 사용자가 수동으로 지정해 줍니다. 다음과 같이 말입니다.

<PFLAGS value="-$YD -$W -$O- -$A8 -v -JPHNE -M -LUDesignIde"/>
오늘 교육차 광주에 왔다..

점심은 구내에서.. 낙지비빔밥을...
저녁은 혼자 나가서 국밥 먹고 왔다..

전라도면 반찬이 푸짐할 줄 알았는데...
꼭 그렇지 만은 않은듯..

지난번 전주 가서 비빔밥 먹을때는 괜찮았는데...

낼까지 있으니까.. 맛난것 좀 먹었으면 좋겠다...
유리지갑 월급쟁이가 더 낫다고?

아니, 세상에나! 이 무슨 말도 안 되는 소리인가! 내 월급만 빼고 온 세상 모든 것이 오르는 데 말이다. 장사하는 사람들은 대박이
나 크게 벌기도 하고, 의사·변호사 같은 전문직은 나보다 2~3배는 더 많이 버는데, 수익이 빤한 월급쟁이인 내가 재테크에 더 유리하다니…….

물론, 수입 면에서 보면 전문직 또는 사업이 번창하는 자영업자들이 일반 직장인보다 수입이 많은 것이 사실이다. 하지만 수입이 많다고 해서 부자는 아니다. 밤무대나 미사리에서 노래를 부르는 과거 잘 나가던 가수들을 보면 알 수 있듯이, 수입이 크게 하는 것도 중요하지만 더욱 중요한 것은 그 수입이 어떻게 관리하는 가이다.

당신의 유리지갑, 이런 강점이 있다
이제 박봉에 유리지갑이기까지 한 당신이 왜 종자돈 모으기에 유리한지 알아보자.

첫째, 당신은 1년에 얼마를 벌지를 알고 있다.
또한 1년에 얼마를 쓰게 될지도 비교적 정확하게 파악할 수가 있다. 당신의 의지에 따라 월급을 남김없이 다 소비할 수도 저축할 수도 있다 반면, 자영업자는 누가 월급을 주는 것이 아니라 스스로 장사를 해서돈을 벌기 때문에 이번 달에 1,000만원 벌었다고 해서 다음 달에도 그렇게 벌 수 있다는 보장은 없다. 하지만 당신은 이번 달에 얼마를 받고,다음 달에 얼마를 받게 될지를 알고 있다.

둘째, 당신의 월급은 꾸준히 상승한다.
처음 회사를 들어가면 당신은 가장 낮은 월급을 받지만, 시간이 지나 사원에서 대리, 주임, 과장, 차장, 부장으로 계속 승진하면 월급이 많아지는 것이다. 반면, 자영업자들은 일을 시작한지 몇 년 되었다고 해서 1,000만 원 벌다가 2,000만 원 벌게 된다는 보장을 할 수 없다.

셋째, 당신은 돈을 벌기 위해 자신의 돈을 쓸 필요가 없다.
회사에서는 당신이 일을 하는데 필요한 집기와 장비를 갖추어 놓고 당신이 일을 할 수 있도록 지원해 주고 있다.



그리고 어려운 일이 발생하면 즉시 물어볼 수 있도록 당신의 상사와 함께 사무실을 쓰도록 친절하게 배려(?)해 놓았다. 즉, 당신은 교통비만 부담하면 나머지는 회사에서 다 해결해 주는 것이다. 하지만 자영업자는 그렇지 않다. 장사를 하기 위해 자신의 이름으로 사업자등록을 하고, 자기 돈으로 영업장소를 구하고 물품을 구비해야한다.

마지막으로, 극단적인 경우 회사가 망해도 당신이 책임질 것은 없다.
당신이 운영하던 가게나 회사가 무너지면 자영업자와 회사 대표들은 모든 재산이 날아간다. 기업의 대표일 경우, 부도를 막지 못해 도망자 신세가 되기도 한다. 그러나 당신은 그저 슬픈 마음으로 새 회사를 알아보면 된다.

지금 당신에게 필요한 건 굳은 의지
이러한 몇 가지의 특징으로 인해, 종자돈 모으기에 대한 굳은 의지만 있다면 직장인들은 지속적으로 계획적인 투자를 할 수 있고, 서서히 부를 모을 수 있다. 자신의 돈을 들이지 않고 버는 돈을 자신의 의지대로 사용할 수 있는 것은 고소득 전문

직이나 자영업자에 비해 경쟁력이 있다. 그래도 혹시 의사, 변호사, 회계사같이 ‘사’ 字 돌림의 직종이 부럽다면 퇴근 후 집에서 열심히 시험 준비를 하면 된다.

토막상식 - 상위 1% 대기업의 평균연봉에 흔들리지 말 것



온라인 채용 정보업체인 ‘잡코리아’에 따르면, 2008년 대기업과 중소기업 대졸 신입사원의 연봉 격차가 1,101만원으로 나타났다고 한다. 국내 매출액 상위 500대 기업 중 조사에 참여한 대기업 신입사원의 평균연봉은 3,093만원인 데 반해, 종업원 300명 미만의 중소기업 신입사원 평균연봉은 1,992만원이라고 한다. 또한 학력별로 대졸자 월평균 월급액은 281만원으로 고졸자 178만원에 비해 1.58배 높다.
단, 대졸자의 초임 연봉이 3,000만원을 넘는다는 얘기는 상위 1%도 안 되는 대기업에 국한된 것임을 명심하기 바란다. 몇몇 슈퍼 직장의 사례를 기준치로 생각해 현재 당신의 연봉에 좌절하거나 분노하며 대박의 꿈을 키우는 일이 없도록 하라.

 

멀고 멀었지만 노후는 결국 당신 이야기
많은 전문가들이 세계 1위라는 한국의 고령화 속도를 이야기하면서 노후준비의 필요성, 재무설계의 필요성을 목 놓아 외치고 있다. 그러나 아직 젊고 건강한 당신에게 몇 개의 숫자만으로는 아무리 설명해도 피부가 와 닿지 않을 것이다. 아직은 괜찮으니 좀 더 여유가 생기면, 또는 나중에 나이 들면 준비하겠다고 생각하는 것도 당연하다.
멀게만 느껴지던 빠른 고령화 진입 속도, 노인 인구 비율의 증가, 저출산 문제 등 이러한 것들을 피부로 느낄 장소가 있으니 바로 지하철이다. 지하철을 타보면 왜 그렇게 자리를 양보해 드려야 할 나이 드신 분들이 많은지…….

탑골공원의 등급 구분


탑골공원에서 장기를 두는 할아버지들은 세 부류로 나뉜다. 1,000원 내기 장기를 두는 형편 좋은 A급 할아버지, 옆에서 구경만 하는 그나마 형편이 중간인 B급 할아버지, 마지막으로 누군가 이기면 돈을 받아서 커피를 대신 뽑아오는 형편이 어려운 C급 할아버지. 나이를 먹는 것은 피할 수 없는 숙명이다. 그러나 젊었을 때 어떻게 준비했느냐에 따라서 나이 들었을 때 어떠한 생활을 할지 결정된다. C급 할아버지보다는 A급 할아버지가 되고 싶고, 탑골공원에서 장기 둘 시간에 해외여행을 하고 오는 특A급 노인이 되고 싶을 것이다. 괜히 술에 취해 사회가 어떻고, 요새 젊은 것들이 어떻고…… 이런 식의 노후를 맞지 않기를 진심으로 바란다. 재무설계는 다가올 인생의 여러 단계에 대한 준비이며, 결국에는 당신이 은퇴했을 때의 모습을 위한 것이다.

인생 재무설계, 지금이 적기다

인생의 재무설계, 복잡한 일이 아니다. 조금씩 준비하고 계획해서 소득 없는 30년 노후생활 동안, 돈 때문에 자식한테 아쉬운 소리 하지 않도록 만드는 것이 인생의 재무설계이다. 나이 들어 돈이 없어서 친구를 만나러 나갈까 말까를 고민하지 않아도 되고, 젊은 사람 눈치 보는 지하철이 아니라당당하게 내 돈 내고 택시 타고 다니도록 만드는 것이 재무설계이다. 그리고 재무설계의 가장 좋은 시작 시점은 바로 지금이다.

하늘에서 돈뭉치가 떨어지지 않는 한, 당신이 받을 급여는 일정하게 유지된다. 그러니 지금의 급여로 당신이 앞으로 경험할 인생의 여러 단계를 준비해야 하는 것이다. 결혼, 주택마련, 자녀교육, 그리고 은퇴 후 노후자금과 혹시 발생할지 모르는 병원비 등등, 이런 것들이 모두 당신의 빤한(?) 월급으로 해결해야 하는 것이다. 따라서 첫 월급은 이제부터 그 돈으로 모든 준비를 시작하라는 의미로 이해해야 한다.

다음은 우리보다 20년 앞서 있는 미국의 상황을 말해주는 것이다. 20년 후 우리의 모습을 생각하면서 천천히 음미해 보기 바란다.
우리가 65세 되었을 때
54%는 완전 무일푼이고, 36%는 이미 사망하였고,
5%는 아직 일을 해야 하고, 4%는 여유 있게 살고,
1%는 매우 풍요롭게 살게 됩니다.

자, 당신은 어느 쪽을 선택하고 싶은가?

토막상식 - 한국인의 평균수명, 80세가 눈앞으로!

2006년 말 기준, 통계청 자료에 따르면 한국인의 평균 수명은 남자 75.74세, 여자 82.36세, 남녀 평균은 79.18세라고 한다. 그러나 이는 어디까지나 평균수명으로 암, 교통사고와 같은 변수를 만나지 않는다면 더 긴 수명을 기대할 수 있다. 그러나 평균수명이 길어진다고 해서 무작정 좋아할 수만은 없는 노릇이다. 이렇게 길어진 평균수명은 50대 중반에 은퇴할 경우 30년 이상 소득 없는 생활을 예고하기 때문이다.

마라톤은 42.195km, 재테크는 18,250일!
마라톤이 42.195km를 사력을 다해 뛰는 것이라면, 재테크는 소득이 발생하는 30세 전후부터 죽기 전까지 약 50년, 날 수로 따지면 18,250일을 계속 해야 하는 것이다. 자산을 형성하는 시기, 그리고 자산을 운용하는 시기, 그리고 마지막으로 자식에게 자산을 물려주는 것까지 모두 재테크에 포함된다. 자식까지 생각할 것이 있느냐고 할 수도 있다. 나 죽으면 끝인데 무슨 유산까지 생각하느냐고? 아니면 자기 밥그릇은 자기가 가지고 태어나는 것이라고? 그럼 자식에게 물어보라. 혹시 경제적인 측면에서 지금까지 키워주신 부모님이 당신을 보면서 그런 생각을 하셨다면 당신이 기꺼이 ‘옳습니다! 부모님 정말 훌륭하십니다!’라고 받아들일지…….



대박 재테크를 꿈꾸는 순간, 당신의 재테크는 흔들린다!

재테크는 50년 동안 해야 하는 재미있는 일이다. 자산이 늘어나는데 지겹다거나 재미없다고 불평할 사람은 없다. 50년간 매번 기록적인 수익을 내거나, 투자하는 것마다 성공한다면 얼마나 좋겠는가! 하지만 길게 보면 어떤 해는 생각보다 수익이 적을 수도 있고, 심지어는 마이너스 수익이 날 수도 있다.

주식을 했는데 상투를 잡게 된 꼴이 되어 눈물을 머금고 손절매를 해야 한다거나, 펀드를 했는데 생각지도 못했던 악재로 인하여 손실을 보고 환매를 해야 하는 상황은 얼마든지 일어날 수 있다. 사두었던 주식이 금세 2배가 되었다고 기뻐하거나 반대로 반 토막 났다고 슬퍼하지 말기 바란다. 생각보다 수익이 너무 높게 나면 주식투자에 욕심이 생겨서 무리하게 투자하다가 쫄딱 망하는 경우가 생길 수도 있기 때문이다.

진정한 부자가 되고 싶은가?
재테크는 궁극적으로 부자가 되기 위한 과정이다. 그렇다면 진정한 부자는 어떤 사람일까. 물론 가지고 있는 절대적인 재산금액이 많아서 아무 걱정 없이 돈을 펑펑 쓸 수 있는 사람도 있겠지만, ‘필요할 때마다 필요한 금액을 어려움 없이 조달할 수 있는 사람’이라고 생각한다. 또한 막연하게 ‘외제 차 타고 싶어요.’, ‘강남에 집 사고 싶어요.’라는 개념 없는(?) 사람보다 ‘5년 후에 4억 원으로 어디에 집을 얻으려 하고, 그걸 위해 연 10% 기대 수익으로 5년간 매달 얼마를 적립식으로 투자할 예정입니다.’라고 하는 사람이 나중에 진정한 부자가 될 수 있는 확률이 높다.
서울에서 부산까지 가야 할 경우 ‘시속 100km로 무작정 달리면 부산 나오지 않겠느냐’는 사람보다 ‘어느 고속도로로 가다가 어느 IC에서 어떻게 가고…….’ 이렇게 계획을 세유는 사람이 목적한 시간에 도착할 가능성이 더 높은 것과 마찬가지이다.

토막상식 -‘상투를 잡다’는 무슨 뜻?

상투가 머리 꼭대기에 있는 것을 빗대어, 주식시장에서 맨 꼭대기 가격에서 주식을 매수해서 손실을 본 것을 ‘상투 잡는다.’라고 표현한다. 정확한 정보 없이 가격이 올라간다고 해서 남들 따라 주식을 사다 보면, 주가가 꼭대기(상투)에 있을 때 주식을 사게 된다.그러나 상투에 있던 주가가 사자마자 바닥으로 떨어지면 속이 새까맣게 타게 된다.

다음은 주식 투자자들이 자주 쓰는 용어이다.

○ 손절매 : 더 큰 손해를 보지 않기 위해 손해를 감수하고 주식을 매도하는 것
○ 바닥을 치다 : 계속 떨어지던 주식이 잠시 하락을 멈추고 옆으로 기다가 올라가기 시작하는 것
○ 깡통계좌: 주식계좌의 돈을 다 날려서 잔고가 없어진 계좌
○ 개미 : 일반적인 개인투자자
○ 세력, 큰손 : 종목의 흐름에 영향을 미칠 수 있는 모든 종류의 매매 주체

취업준비의 시간이여, 이제 안녕

어엿한 사회인이 되어 명함도 만들고 월급도 받으면 친구들을 만나도 화제가 달라진다. 취업 전에는 어느 회사 가려면 적어도 취업 몇 종 세트는 있어야 한다거나, 토익이나 학점은 최소 몇 점이 되어야 입사가 가능하다는 이야기를 했다면, 이젠 각자 취업한 회사에서 자기가 하게 될 일이 세상에서 가장 중요한 일이라는 것과 수출부서 입사자는 조만간 어디어디 나라로 비행기 타고 출장가게 될 것이라는 이야기 등을 하게 된다.


그리고 또한 자주 화제에 오르는 것이 각자 취업한 연봉, 월급 이야기이다. 삼성이 높다는 둥, LG가 높다는 둥, SK는 연말 성과급이 몇 퍼센트가 나와 나중에 보면 얼마가 된다는 둥…….


동창회에서 기죽지 마라


혹시 당신의 연봉이 2,000만 원이나 3,000만 원 받는데, 친구는 4,000~5,000만 원 사이의 폼나는 외국계 회사의 직장인인가? 부러울 것이다. 그러나 부러워할 것 하나 없다. 앞서 이야기한 바와 같이 얼마를 버는가보다 어떻게 모으느냐가 중요하기 때문이다.

이제 기본적으로 연봉별로 종자돈 모으는 방법을 설명하려고 한다. 단, 다음 내용은 어디까지나 세후 월급을 전제로 한다. 28~29쪽 <재테크 비밀과외>의 ‘월급명세서 전격 해부’가 기억나는가. 월급의 8%는 내 것이 아니라 국가의 것이라는 것을. 흔히 자신의 세전 연봉을 자신의 통장 입금액으로 착각하는데, 슬프지만 그러지 말자.

① 연봉 1,500~1,800만 원-종자돈 목표: 3년 내 3,000만 원

만족스럽지는 않을 것이다. 써야 할 곳은 많은데 마음 가는 대로 쓰다 보면 다음 달 파산의 위험을 느끼게 된다. 일단 목표는 독하게 잡자. 간단히 보면 1년에 1,000만 원 모으는 것이므로 월급의 80만 원은 당신 것이 아니라 금융기관 것이라고 생각하자.
앞으로 3년간은 말 그대로 세상에서 가장 짜게 살아야 한다. 신용카드는 단지 교통카드로만 사용해야 한다. 그리고 휴대전화는 받는 용도로만 써라. 급하면 상대방이 전화할 테니 말이다. 5년 후에 거하게 밥을 살 수 있을 테니 우선 당분간은 ‘오늘은 내가 쏜다.’라는 식의 멘트는 삼가기 바란다. 회사에서 짜다고 소문나면 좋은 것이 많다. 당신에게 금전적인 도움이나 신세를 전혀 기대하지 않을 것이기 때문이다. 일단 3년 안에 3,000만 원을 모으는 데 성공한다면 투자 포트폴리오를 구성해 볼 수도 있고, 앞으로도 목돈 모으기의 고수가 될 수 있다. 단, 조심할 것은 조급한 마음으로 누가 어디에 투자하면 좋다고 해도 따라가면 안 된다는 것이다. 일단 3,000만 원 모을 때까지는 대박 수익을 기대하지 말자.

▶ 전략 방향: 매달 80만 원 중 적금 20만 원, 펀드 60만 원 투입

② 연봉 2,000만 원대-종자돈 목표: 4년 내 5,000만 원

월급은 꼬박꼬박 받지만 뭔가 부족하다고 느껴지는 회사에 다니고 있을 것이다. 당신의 친구들이 연봉 3,000이네 4,000이네 하면 당신은 좌절만 하고 있을 것이 아니라 투자로 그 차이를 메우겠다는 독한 결심을 해야 한다.
월급 중에서 100만 원은 당신 돈이 아니라 금융기관에 보내기 위해 잠시 맡아둔다고 생각하라. 나머지 60만 원으로 생활비와 용돈을 해결하고 거기서 남는 돈이 있다면 보험 들고 저축하라. 종자돈 목표는 4년 내 5,000만 원으로 잡도록 한다. 5,000만 원이면 남자의 경우 주택 전세 자금, 여자의 경우 혼수자금 마련과 남편 몰래 투자할 수 있는 비상금을 해결할 수 있다. 혹시 독신주의자라면 5,000만 원으로 투자 포트폴리오를 구성해서 실행할 수 있다. 5,000만 원을 1차 목표로 하여 그다음 단계를 준비해야 하는 것이다. 확실한 재개발·건축 정보가 있다고 해서 직장인 신용대출을 풀 한도로 받아 월급을 빚 갚는 데 쓰지 않기를 바란다. 혹은 로또를 사서 토요일 저녁마다 TV를 보면서 대박 환상을 꿈꾸는데, 로또 살 돈도 아깝고 정신건강에도 도움이 안 되니 그러지 말기를 바란다.

▶ 전략 방향: 매달 100만 원 중 적금 20만 원, 펀드 80만 원 투입

③ 연봉 3,000만 원대-종자돈 목표: 3년 내 7,000만 원
연봉 2,000보다는 훨씬 좋지만 연봉 4,000 받는 사람보다는 약간 불리한 위치이다. 어디 가서 ‘연봉 3,000입니다.’라고 이야기하기에는 좋은데, 세금도 좀 나가는 것 같고, 이상하게 실제 남는 돈은 별로 없다. 종자돈 모으기에서 가장 애매한 위치이다. 적은 것도많은 것도 아닌 상황인데, 그래도 3,000은 넘으니 ‘이 정도는 괜찮아.’라고 하면서 불필요한 과소비에 관대해지는 것이다.생활비와 그 밖에 자신에게 관대한 소비금액은 1년에 1,000만 원으로 한도를 정하고 나머지는 월급날 당신이 잠시 맡아두었다가즉시 금융기관으로 송금하라.
종자돈 목표는 7,000만 원으로 잡도록 한다. 일단 7,000이 되면 종자돈의 상징적인 목표인 1억이 눈앞에 보이므로 본격적으로 정보를 수집하게 되고 불필요한 소비를 절제할 수 있는 심리 상태가 된다.

▶ 전략 방향: 매달 160만 원 중 적금 30만 원, 펀드 130만 원

④ 연봉 4,000만 원대-종자돈 목표: 3년 내 1억 원
축하한다. 남들보다 출발점이 좋다. 하지만 혹시 동기 중에 회계사나 세무사가 있다면 남들은 당신의 4,000 연봉을 부러워해도 당신 나름대로는 불만이 있을지 모르겠다.
종자돈 목표는 1억 원으로 한다. 종자돈의 상징적인 기념비를 달성하고 1억 원 다음 단계인 2억→ 5억→ 10억으로 가기 위한 베이스캠프를 만들자. 단순히 계산해 봐도 연간 생활비가 1,000만 원을 사용하고 나머지 3,000만 원을 3년씩 저축해도 9,000만 원이므로 저축만 잘해도 1억을 만들 수도 있겠다. 연봉 2,000인 사람이 4년 동안 5,000만을 모으는 것과 비교할 때, 종자돈 모으는 기간만으로 몇 년을 앞서갈 수 있다.

▶ 전략 방향:
매달 250만 원 중 3년간 적금 50만 원, 펀드 200만 원

⑤ 연봉 5,000만 원 이상-종자돈 목표: 4년 내 2억 원
아직 30대 초반인데 이 정도 연봉이라면 일단 축하한다. 전문 자격증을 따기 위해 도서관에서 묵묵히 공부한 당신의 모습이 눈에 보이는 것 같다. 이제 소득의 크기 자체는 다른 사람보다 앞서 있으니 잘 운용하는 것과 좋은 포트폴리오를 구성하는 것이 중요하다.
2억 모아서 부동산과 금융에 각각 1억씩 투자라는 방법도 있고, 가능한 범위 내에서 은행 대출을 받아 투자해서 ‘지렛대(레버리지)효과’를 보는 방법도 있으니 다른 사람들에 비해 선택의 폭이 넓다고 할 수 있다. 우선 2억을 만들겠다는 목표를 설정하는 것이 중요하다. 그러나 고소득자라는 타이틀에 취해 수입 자동차를 사고 비싼 양주를 즐겨 마신다면 연소득 5,000이 넘는다 해도 2억 모으기가 쉽지 않을 것이다.

▶ 전략 방향: 매달 350만 원 중 적금 100만 원, 펀드 25만 원

⑥ 억대 연봉
이제 이 책을 조용히 덮고, 지금 당장 서점에 가서 절세에 대한 책을 사서 읽어 봐라. 그다음으로 인터넷에서 소득공제에 대한 내용을 추가 검색해 보기 바란다.



토막상식 -현명한 지렛대 사용이 필요하다

타인에게 빌린 돈을 지렛대처럼 이용하여 자기자본의 이익률을 높이는 것을 ‘지렛대(레버리지)효과’라고 한다. 빌린 돈의 금리보다 높은 수익률이 기대되는 경우에는 유리하지만, 경기가 어려워져 수익률이 나쁠 때에는 금리부담의 위험성이 있다.
2007년 펀드 수익률이 20~30%에 육박하자 많은 직장인들이 마이너스 통장이나 사채까지 끌어들여 펀드에 올인 했다. 대출이자보다 높은 수익률을 보였다. 정확한 정보가 아니라면, ‘묻지마 투자’는 금물이다. 특히 남의 돈으로 하는 투자는 더욱 그렇다. 잘못되면 영화 <비열한 거리>에서 볼 수 있는 무서운 아저씨들이 돈 갚으라고 당신 집으로 찾아갈지도 모르기 때문이다.


병원비는 바겐세일 기간이 없다


얼마 전에 한 친구가 자기 입 안으로 자동차 한 대가 들어갔다고 이야기 하는 것을들은 적이 있다. 그게 무슨 말인가 들어보니 치아 통증이 심해서 치과를 갔더니 이것저것 치료를 해야 한다고 해서 하라는 대로 다했고, 그 결과 치과 치료비 1,000만원도 넘는 돈을 썼다는 것이다.
병원에 가는 것은 결코 유쾌한 일이 아니다. 그나마 건강보험이 적용되는 진료를 받으면 좀 낫지만, 그렇지 않은 경우 치료 한 번 하려면 부담이 장난이 아니다. 치과를 예로 들어보자.
충치가 생겨서 치료를 받으려면, 썩은 부분을 깎아내고 거기에 금, 은, 동 또는 원래이와 잘 구별되지 않는 라미네이트 등 중에 하나를 선택해서 코팅(?)을 해야 하는데, 비용이 200만 원 정도 든다고 한다. 충치 하나면 다행이지만, 입 안으로 자동차한 대가 들어가는 것은 시간 문제인 것이다.

게다가 이상하게 병원비는 백화점처럼 세일 기간도 없다. 또 병원비는 누구도 가격 흥정을 하려고 하지 않는다. 가격비교 사이트도 없고 말이다.

통신카드 사용한 할인은 절약이 아니다

신용카드를 사용해서 영화표를 싸게 구입하고, 커피집에서 도장 10개를 모아 1잔을 무료로 마시고, 또한 휴대폰 멤버십 카드로 10~15% 할인받는 것은 절약이라고 생각하는 사람들이 있다. 하지만 진정한 절약은 바로 병원비에 있지 않나 싶다. 입 안으로 자동차 값이 들어가는 것을 막거나, 아니면 나중에 어디가 아파서 병원 신세를 지게 될 일을 막는다면 그게 바로 절약인 것이다. 병원 의사 선생님들은 우리나라에서 가장 똑똑한 엘리트이므로 그분들 월급 주려면 병원비를 깎을 수도 없는 노릇이니 말이다. 특히각종 커피 전문점에서 생크림을 가득 얹어서 카페모카 드시는 분들, 커피 음미 후 양치질은 플리즈다.

건강해야 회사도 오래 다닌다
사회생활을 하다 보면 이것저것 배워야 할 것도, 신경 써야 할 것도 많겠지만 출퇴근길에 직장 근처의 헬스클럽(요새는 ‘피트니스 센터’라고 하는 곳이 많더라.)을 찾아보라고 권하고 싶다. 석 달에 10만원 내외로 청춘과 젊음을 10년쯤 늘릴 수 있다면 그보다 수익성 좋은 투자가 어디 있겠는가. 우선 당신의 건강을 위해 투자해야 하겠다.
굳이 돈 들여서 러닝머신 위를 달릴 것이 아니라, 집 주위를 걷는 유산소 운동이라든가 방바닥에서 팔굽혀펴기와 윗몸일으키기를 하는 등 공짜로 운동하는 것도 효과 100배의 절약이 될 것이다.
직장에서 몸이 아파 자주 결근하는 사람보다 야근을 아무리 많이 해도 마치 기계처럼 정확하게 출근해서 또 야근하는 사람에게 더욱 신뢰하고 중요한 일을 맡길 것이다. 전날 회식을 새벽까지 해도, 다음날 정시 출근하는 사람과 늦잠을 자서 지각하는 사람은 진급 속도부터 다르다.

가장 훌륭한 노후대비는 건강이다

재무설계에서 중요하게 고려되는 변수는 은퇴 후 예상 생존 기간과 현재를 기준으로 한 월별 생활비 규모다. 즉, 현재 수준으로 월 200만 원 정도의 생활비를 은퇴 후에도 지속적으로 지출하고 싶은 경우, 얼마의 돈을 모아서 몇 퍼센트의 수익이 나는 상품에 투자해야 하는가를 고민해야 하는데, 여시서 가장 큰 변수가 병원비와 간병비 항목이다. 얼마나 들지 알 수 없기 때문이다. 가장 훌륭한 은퇴는 바로 가장 늦게 은퇴하는 것이다. 그리고 가장 훌륭한 노후 대비는 바로 건강이다.

신체 상태가 최고조인 20대에서 30대 초반까지는 건강에 신경을 쓰지 않아도 그다지 차이가 없다. 그러나 30대 중반부터 젊은 시절의 건강 관리 유무에 따라 지출해야 하는 병원비의 단위가 달라진다.

한국인의 평균 수명이 80대를 육박하는 상황이니 평균 수명 100세도 멀지 않았다. 영화 <아일랜드>처럼 복제인간을 만들어 아플때마다 자동차 부품 교체하듯 고장 난 장기를 바꾸어 줄 수 있는 날도 멀지 않은 것 같다. 그러나 그런 의료 서비스는 상당히 값이 많이 들 것이다. 당신의 미래를 미리 준비하기 바란다.


토막상식 - 평균 수명과 건강 수명의 차이



평균 수명과 건강 수명은 다르다. 앞서 말했듯이 평균 수명은 78세이지만, 신체에 아무 문제 없이 건강하게 생활하는 건강 수명은 68세라고 한다. 즉, 노인의 경우 평균 10년 이상을 질환 또는 와병 상태로 지내야 한다는 것이다. 젊은 시절부터 노후생활비와는 별도로, 병원비와 간병비를 준비해 둬야 하는 이유가 여기에 있다.

[출처] http://cafe.daum.net/mmnix/1iX7/3417 (다음 짠돌이 카페)

'7.자료수집 > 70.돈' 카테고리의 다른 글

관심 지역  (0) 2010.02.09

+ Recent posts