Halcon MFC VC++ 1D Measureing fuse.hdev

經過昨晚的折騰,今天把昨天寫不好的那段改完了

以下是程式碼:


Hobject image,ImageMean,DarkPixel,ConnecttionRegions,SelectionRegions,EdgeFirst,ROI;

read_image(&image,"fuse.png");
double Row=350;
double Column=580;
double Angle=0.5*PI;
double Length1=120;
double Length2=20;
HTuple RowEdgeFirst,ColumnEdgeFirst,Amp,ROW_edge,ColunEdge,AMP_SECOND,IntraDIS,INETR_DIS;
int Row_edge_int;
Hlong width,height,MeasureHandle;
get_image_size(image, &width, &height);//获取图像宽、高 
gen_rectangle2(&ROI,Row,Column,Angle,Length1,Length2);
//(double Row, double Column, double Phi, double Length1, double Length2, Hlong Width, Hlong Height, const char *Interpolation, Hlong *MeasureHandle);
gen_measure_rectangle2(Row,Column,Angle,Length1,Length2,width,height,"bilinear",&MeasureHandle);
measure_pairs(image,MeasureHandle,1,1,"negative","all",&RowEdgeFirst,&ColumnEdgeFirst,&Amp,&ROW_edge,&ColunEdge,&AMP_SECOND,&IntraDIS,&INETR_DIS);
Row_edge_int=ROW_edge[0].I();
Row_edge_int=abs(Row_edge_int);
// int w = width[0].I();//HTuple类型
//
CRect rtWindow1;
HTuple Window_HANDLE;
GetDlgItem(IDC_DISPIMAGE)->GetClientRect(&rtWindow1);
HWND hlmgWnd=GetDlgItem(IDC_DISPIMAGE)->m_hWnd;
open_window(rtWindow1.left,rtWindow1.top,rtWindow1.Width(),rtWindow1.Height(),(Hlong)hlmgWnd,"visible","",&Window_HANDLE);
set_color(Window_HANDLE,"blue");
disp_obj(image,Window_HANDLE);
//disp_obj(ROI,Window_HANDLE);
double a=0.0;
double b=0.0;
for(int i=0;i<5;i++)
{
HTuple ROWW;
HTuple COLL;
double A[2];
double B[2];
a=RowEdgeFirst[i].D();
b=ColumnEdgeFirst[i].D();
A[0]=-sin(Angle+0.5*PI)*Length2+a;
A[1]=-sin(Angle-0.5*PI)*Length2+a;
B[0]=cos(Angle+0.5*PI)*Length2+b;
B[1]=cos(Angle-0.5*PI)*Length2+b;
ROWW[0]=A[0];
ROWW[1]=A[1];
COLL[0]=B[0];
COLL[1]=B[1];
gen_contour_polygon_xld (&EdgeFirst,ROWW,COLL);
// (EdgeFirst, [-sin(Angle+rad(90))*Length2+RowEdgeFirst[i], -sin(Angle-rad(90))*Length2+RowEdgeFirst[i]], [cos(Angle+rad(90))*Length2+ColumnEdgeFirst[i], cos(Angle-rad(90))*Length2+ColumnEdgeFirst[i]])

disp_obj(EdgeFirst,Window_HANDLE);
}



由此我們可以看到 gen_contour_polygon_xld (&EdgeFirst,ROWW,COLL);這個函數的使用需要兩個Tuple,不過Tuple如果要擴充,可以使用

一般常見的陣列就是我的A[0]、A[1]、B[0]、B[1]去給值

Htuple與 double的互轉

pbImage的专栏有很清楚的範例如下:

http://m.blog.csdn.net/blog/CImage/22988199

最後可以看到框線指有兩條有框到,另外三條框歪了,大概是我的

double Row=350;
double Column=580;
double Angle=0.5*PI;
double Length1=120;
double Length2=20;

參數設定上不夠好,基本上就是要tunning了(目前我只是練習所以不打算去tune這些參數的)。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值