小慶
一般會員
發表:45 回覆:31 積分:15 註冊:2004-09-29
發送簡訊給我
|
各位前輩.....小弟我有一個問題...
就是有一張已經二質化完的圖
然後怎麼用程式把它框出來.........
然後框出來以後........
將框出來後的高分成三等份(1:3:3)並把它畫線......
我的圖如下:
...謝謝各位前輩......
...正在努力學習中的小弟......
|
暗黑破壞神
版主
發表:9 回覆:2301 積分:1627 註冊:2004-10-04
發送簡訊給我
|
可以給一下。你的程式跑出來想要”像什麼”嗎?
原始圖是這樣。那目標勒?
只說1:3:3又要幹什麼呢? 對不起喔。我們書讀得不多。不知道一些專有名詞的說法。
麻煩白話些或是給原始及目標。這樣才好協助你。^_^
|
小慶
一般會員
發表:45 回覆:31 積分:15 註冊:2004-09-29
發送簡訊給我
|
不好意思.......各位前輩......
我從覆一下我的問題......
就是有一張圖....亮的點(pixel=255)暗的點(pixel=0)
如下圖.......我想把亮的點即白色區域用程式將它框出來
然後將框出來的框的高度分成三等份(1:3:3)並畫線.....如下圖...
謝謝前輩們的指導...
正在努力學習中的小弟.........
|
暗黑破壞神
版主
發表:9 回覆:2301 積分:1627 註冊:2004-10-04
發送簡訊給我
|
都會那麼複雜的轉圖了。。。。。
這個算是簡單的吧。
設幾個變數 minX, maxX, minY, maxY.
然後去掃一下這個圖。
你就可以找到X的左跟右邊界。以及Y的最上跟最上邊界。
然後用Y去把它分三等分。
這樣不就算解出來了嗎?
|
小慶
一般會員
發表:45 回覆:31 積分:15 註冊:2004-09-29
發送簡訊給我
|
前輩你好......
因為我是程式初學者.......
我的程式不知道哪裡出錯了.......一直沒辦法run所以......
可否請前輩把程式po出來讓我參考....... 謝謝...
正在努力學習中的小弟....
|
暗黑破壞神
版主
發表:9 回覆:2301 積分:1627 註冊:2004-10-04
發送簡訊給我
|
~_!
應該是你把不能動的程式PO出來吧。
不是要我寫給你吧。
|
小慶
一般會員
發表:45 回覆:31 積分:15 註冊:2004-09-29
發送簡訊給我
|
前輩.......感謝你的回答...
現在我的圖變成這樣...如下...
程式也如下....
要畫白色物體的下方線.....不知道怎麼寫
而且我只想框白色物體.....
....另外...前輩我不知道怎麼把框駐物體的4個點標示出來
圖:
程式:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap *TheBitmap, *TempBitmap;
TempBitmap = new Graphics::TBitmap;
TempBitmap->Assign(Image1->Picture->Bitmap);
TempBitmap->PixelFormat = pf8bit;
Byte *ptr;
int w,h,i,j;
w=Image1->Width;
h=Image1->Height;
int n=0,line=-1;
int mark=w;
for (i=0; iScanLine[i];
line = -1;
for (j=0; j=255)
{
line=j;
break;
}
}
if ( line!=-1 && mark>line )
{
mark=line;
//break;
}
} //if (line != -1)
{
Edit1->Text=line;
Image1->Canvas->Pen->Color=clGreen;
Image1->Canvas->Pen->Width=1;
Image1->Canvas->Pen->Style=psSolid;
Image1->Canvas->MoveTo(mark,0);
Image1->Canvas->LineTo(mark,h);
}
mark=0;
for (i=0; iScanLine[i];
line = -1;
for (j=w-1; j>=0; j--)
{
if (ptr[j]>=255)
{
line=j;
break;
}
} if ( line!=-1 && markText=line;
Image1->Canvas->Pen->Color=clGreen;
Image1->Canvas->Pen->Width=1;
Image1->Canvas->Pen->Style=psSolid;
Image1->Canvas->MoveTo(mark,0);
Image1->Canvas->LineTo(mark,h);
}
delete TempBitmap;
}
//--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender)
{
Graphics::TBitmap *TheBitmap, *TempBitmap;
TempBitmap = new Graphics::TBitmap();
TempBitmap =Image1->Picture->Bitmap;
TempBitmap->PixelFormat = pf8bit;
Byte *ptr1;
int w,h,i,j;
w=Image1->Width;
h=Image1->Height;
unsigned short int piexl[640][480];
int n=0,line;
for(int j=0;jScanLine[j];
for(int i=0;i0)
{
line=j;
break;
}
else
{
n=0;
}
}
Edit1->Text=n;
Edit2->Text=line;
Image1->Canvas->Pen->Color=clGreen;
Image1->Canvas->Pen->Width=1;
Image1->Canvas->Pen->Style=psSolid;
Image1->Canvas->MoveTo(0,line);
Image1->Canvas->LineTo(640,line);
}
謝謝前輩的指導...
|
暗黑破壞神
版主
發表:9 回覆:2301 積分:1627 註冊:2004-10-04
發送簡訊給我
|
你會用 ScanLine 這個東西,那你就會判斷它的內容是不是白色啊。
對不對?
這樣你就可以像我說的找出它在那一行那一點開始是白色。
這不就是答案了嗎?????
怪怪。。。。難道你的程式是抄來的?
|
暗黑破壞神
版主
發表:9 回覆:2301 積分:1627 註冊:2004-10-04
發送簡訊給我
|
int minX=w;
int maxX=0;
int minY=h;
int maxY=0;
for(int i=0;iScanLine[i];
for(int j=0;j j)
minX = j;
if (j > maxX)
maxX = j;
if (minY > i)
minY = i;
if (maxY < i)
maxY = i;
}
}
再來就是用 linto 這種東西。由
(minX, minY) -> (maxX, minY)
(minX, minY) -> (minX, maxY)
(maxX, minY) -> (maxX, maxY)
(minX, maxY) -> (maxX, maxY) 畫起來就是你要的四方框了啊。
程式未實際跑過。可能你還要TRY一下。
|
小慶
一般會員
發表:45 回覆:31 積分:15 註冊:2004-09-29
發送簡訊給我
|
謝謝前輩的指導........
我的程式是自己寫的......只是有些觀念搞不懂...
經過前輩的指導......我大概懂了..... 非常謝謝你......
|