residue
中階會員
發表:90 回覆:153 積分:53 註冊:2003-07-02
發送簡訊給我
|
如何把image1上的數字用StringGrid1顯示出來 如下圖 謝謝!! 發表人 - taishyang 於 2004/02/27 16:10:28
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
residue您好:
您指的是這樣嗎?
for (int i=0; iRowCount; i )
for (int j=0; jColCount; j )
StringGrid1->Cells[i][j]="10"; 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~>
|
residue
中階會員
發表:90 回覆:153 積分:53 註冊:2003-07-02
發送簡訊給我
|
感謝大大的回應喔!! 真對不起小弟我不應該偷懶的!!
其實小弟是想把圖上每點圓心的值,用>按照順>序存在 class="code"> Form1->Image1->Canvas->TextOut(X,Y,10); 這行指令,先把圓心的值顯現在Image1上, 再依圓心出現在Image1的座標位置一序抓近來StringGrid1的格子中就是這邊出了問題還請大大指教!! 謝謝!!
ps:按照順是指:(例如第一個圓的圓心位子本應存放在StringGrid1的第一格) >
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
residue您好:
感覺您好像要做魚眼矯正
但是看不太懂您要表達的意思,尤其是紅色字體部分< class="code">
且Form1->Image1->Canvas->TextOut(X,Y,10);
要改成Image1->Canvas->TextOut(X,Y,IntToStr(X) "," IntToStr(Y));
才能顯示圓心座標吧 > 或是將您的程式碼或 >
|
residue
中階會員
發表:90 回覆:153 積分:53 註冊:2003-07-02
發送簡訊給我
|
恩!!
還真瞞不過大大您的法眼囉
其實我是在座魚眼睛校正,我的想法事先算出個點的圓心值,看相差多少在利用內插法補正回來,而我抓取圓心的程式是參考
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
我是由您以前到現在的問題判斷可能是有關矯正的問題
但小弟沒這這面的經驗 我不確定 href="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26613">http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26613
其演算法應該是可以按照順序(從左到右,從上而下)取得圓心
如此一來就可以達到您的目的 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~>
|
residue
中階會員
發表:90 回覆:153 積分:53 註冊:2003-07-02
發送簡訊給我
|
感謝大大的回覆!!
小弟我看囉,kenano2大哥的程式!!
他低程式好像是局部收尋,小弟想的是把他加入brook大大的程式中,使得brook大大的程式能夠做到,按照順序(從左到右,從上而下)取得圓心的功能但不知要從哪下手還請大大提示 謝謝!!
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
residue您好:
kenano2大哥的程式,應該能符合您的需求...
但因為您的圓形排列有點[彎曲],所以會先找到最[突出]的圓形之圓心
所以您可以掃完一列(橫列直行)後將x座標做排序...
就可以正確的將各圓心依序放在StringGrid上 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~>
|
residue
中階會員
發表:90 回覆:153 積分:53 註冊:2003-07-02
發送簡訊給我
|
感謝大大的指導!! 但小弟想囉好久,還不知道如何運用 class="code"> #include
#include
#pragma hdrstop
#include<math.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int pixelvalue[500][500];
int countmath=0;
int totali=0;
int totalj=0; //--------------------------------------------------------------------------- TStringList *Ls[253]; void math (int i,int j)
{
pixelvalue[i][j]=0;
countmath ;
totali=totali i;//縱座標
totalj=totalj j;//橫座標
if(pixelvalue[i][j 1])
math(i,j 1);
if(pixelvalue[i 1][j])
math(i 1,j);
if(pixelvalue[i][j-1])
math(i,j-1);
if(pixelvalue[i-1][j])
math(i-1,j); Form1->Edit6->Text= countmath; } void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap *bmp = new Graphics::TBitmap();
bmp->Assign(Form1->Image1->Picture->Bitmap);
bmp->PixelFormat=pf24bit; Byte *ptr;
for (int y = 0; y Height; y )
{
ptr = (Byte *)bmp->ScanLine[y];
StatusBar1->SimpleText = y;
for (int x = 0; x Width; x )
{ math(y,x);
}
}
delete bmp;
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
residue您好:
我用一張200*160的二值影像並用下面的code做測試(目標物體是白色,底是黑色)
int pixelvalue[200][160]={0};
int countmath=0,totalx=0,totaly=0;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap* BMP = new Graphics::TBitmap();
BMP->LoadFromFile("0.bmp");
Byte* ptr=NULL;
for (int y=1; yHeight-1; y )
{
ptr=(Byte*)BMP->ScanLine[y];
for (int x=1; xWidth-1; x )
{
if (ptr[x*3]==255)
pixelvalue[x][y]=1;
}
}
Image1->Picture->Assign(BMP);
delete BMP;
for (int y=0; y<160; y )
{
for (int x=0; x<200; x )
{
if (pixelvalue[x][y]==1)
{
math (x,y);
int messx=(float)totalx/countmath;
int messy=(float)totaly/countmath;
Memo1->Lines->Add("x:" IntToStr(messx) " Y:" IntToStr(messy));
totalx=0; totaly=0; countmath=0;
}
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::math(int x,int y)
{
pixelvalue[x][y]=0;
countmath ;
totalx=totalx x;
totaly=totaly y;
if(pixelvalue[x][y 1])
math(x,y 1);
if(pixelvalue[x][y-1])
math(x,y-1);
if(pixelvalue[x-1][y])
math(x-1,y);
if(pixelvalue[x 1][y])
math(x 1,y);
} 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~> 發表人 -
|