* 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).