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

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);                                               // 영역그리기

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

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);                                               // 영역그리기

* 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://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=60&MAEULNo=23&no=234&ref=234


구현 내용은 다이얼로그바에서 버튼을 틀릭 하면 뷰가 변경되는 기능을 구현 하엿으며,

뷰 스위칭 하는 소스는 데브피아에서 참고 하여 작성 하엿습니다..


프로젝트는 CE MFC(exe)의 뷰의 Base Class를  CFormView기반으로 시작 하엿습니다..

나중에 뷰 스위칭을 위해서요..^^
 

1.  CDialogBar를 상속 받은 파생 클래스를 제작 합니다. 클래스명은 CDlgBar이고요..^^

---클래스 생성시 위져드에 보면 CDialogBar 가 Base class 에 포함 되어 있지 않기 때문에
    CDialog 를 상속 받아 클래스를 만든 다음 부모 클래스를 CDialogBar로 바꾸어 주어야 합니다..

    그리고 리소스에서 다이얼로그 의 스타일을 Child로 바꾸어 줍니다..


- 생성된 클래스에 Create 함수를 두개 구현 합니다..

    필요한거 하나만 구현 하여 사용 하셔도 됩니다..^^


2. 다이얼로그바 활성화 시키기

    -- 다이얼로그바 클래스를 만들고 MainFrame에서 바로 생성 하여 사용 할려면 버튼이 활성화 되지 않는     현상이 생기게 됩니다..
    해서 ON_UPDATE_COMMAND_UI 메시지 핸들러 함수를 설치하셔야 합니다..

    이녀석 또한 위져드에서 보이지가 않더군요...

    메시지 맵에 직접 추가해 주었습니다..

    메시지 핸들러 함수는

        afx_msg void OnUpDateCmdUi(CCmdUI *pCmdUI );

    BEGIN_MESSAGE_MAP에는

        ON_UPDATE_COMMAND_UI(IDC_DLGBAR_BTN1, OnUpDateCmdUi)

    핸들러 함수 구현은  

        void CDlgBar::OnUpDateCmdUi(CCmdUI *pCmdUI )

        {

            pCmdUI->Enable(TRUE);

        }

    이와 같이 등록 하여 줍니다..

     ON_UPDATE_COMMAND_UI매크로를 이용하여 COMMAND ID 와 메시지 핸들러 함수를 연결해 두면

    그 COMMAND ID를 갖는 사용자 인터페이스가 갱신되어야 할 필요가 있을때마다

    그 함수가 호출됩니다.

    - 이렇게 하여 다이얼로그바의 컨트롤을 (예제에서는 버튼) 을 활성화 하게 됩니다.


3.    다이얼로그바 생성

    CDlgBar를 MainFrame의 멤버 변수로  선언 하고 ,

    MainFrame의 OnCreate함수 에서 아래와 같이 다이얼로그바를 생성해 줍니다..

   



    이렇게 하면 다이얼 로그바가 생성 됩니다..
    다이얼로그바의 버튼 클릭시 하고 싶은 행동은 다이얼로그바의 클래스에서 해주시면 되겟죠..??^^

   

------------------    이렇게 해서 다이얼로그바는 생성을 마쳤습니다...  ----------------------


 그럼 다이얼 로그바의 버튼을 클릭 할때 버튼 마다 다른 뷰를 보여 주는 기능을 구현 해 보도록 하죠..

 

 데브피아에서 찿은 CE에서 뷰 스위칭 하는 소스를 가지고 사용 하엿습니다..^^;

 

1. 일단 메인뷰가 아닌 교체될 뷰를 생성 해야 겠죠??

    제가 만든 예제에서는 두개를 생성 햇습니다..
    - 먼저 리소스에서 다이얼로그를 하나 insert합니다.

    - 그다음 속성에서 style과  border를 각각 Child와 None으로 줍니다.

    - 그런 다음 Ctrl+W로 위져드를 열면 클래스를 생성할것이냐고 뭍습니다..그럼 OK하고 ,

    - 클래스 이름을 넣어 주시고 , Base Class 를 다이얼로그가 아닌 CFormView로 하여

        클래스를 생성 합니다.

    - 그럼 뷰 클래스 하나가 생성 되엇습니다..

   

    - 만든 뷰에서 어떤 작업을 하고 싶으면 만들어진 클래스에서 작업 하시면 됩니다..^^

   

2. 교체되어질 뷰가 만들어 졌으니 이제 교체를 해보겟습니다..
    - 먼저 뷰를 담을 배열을 하나 선언 합니다..

        CView* m_pViewArray[MAX_VIEW_CNT];

        CView * 타입의 변수 입니다.. MAX_VIEW_CNT는 define된 배열의 개수 이고요

        이녀석을 생성자에서 초기화 해줍니다..



         

    - 그담에 MainFrame에 멤버 함수를 추가 합니다.

        뷰를 인덱스로 관리 하여 해당 뷰의 인덱스를 인자로 받아 현재 보이고 잇는 뷰를 사라지게 하고,

        바꾸어질 뷰를 보여 주는 함수 입니다..

        이 함수를 다이얼로그바의 버튼에서 호출 하면 버튼마다 보여주고 싶은 뷰를 보이도록 할 수

        있습니다..

       

설명이 제대로 됐는지 모르겠습니다..
아까 오전에 올린거는 설명이 넘 허접 하게 올려서 추후에 다시 수정 하겠습니다..
일하는중에 올리다 보니 정신이 없네요..^^; 남에세 설명 하는것도 처음이고요.....^^;

허접한 팁이었습니다..

 

소스첨부 하였습니다....

 

-----      즐거운 하루들 보내세요..^^     -----

+ Recent posts