* 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, |
사용 예시
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).
'1.소프트웨어 이야기 > 02.Vision(Image Processing)' 카테고리의 다른 글
Halcon 사용 예제 - 사각형 마크 중심에서 떨어진 값 구하기 (0) | 2009.02.25 |
---|---|
Halcon 기본 설정 방법 (0) | 2009.02.25 |
[펌]영상처리 용어 해설 (0) | 2008.01.23 |