* 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);
* 이미지 표시하기
사용 함수 원형
d isp_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).