經過昨晚的折騰,今天把昨天寫不好的那段改完了
以下是程式碼:
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,&_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這些參數的)。