小慶
一般會員
發表:45 回覆:31 積分:15 註冊:2004-09-29
發送簡訊給我
|
各位前輩.....我想請問一下
現在有一張640*480的圖
圖已經二質化完了 該怎麼做垂直投影量...和水平投影量呢...
圖檔如下: 正在努力學習中的小弟......
|
skybow
一般會員
發表:10 回覆:10 積分:4 註冊:2004-04-30
發送簡訊給我
|
不太了解您的意思 是指做水平或垂直方向的edge detection嗎?
|
arisaka_matsuri
高階會員
發表:25 回覆:205 積分:231 註冊:2003-10-19
發送簡訊給我
|
dear 小慶:
依你的例子,可以寫成
// 統計水平與垂直方向的投影量
long ProjectV[640] = {0};
long ProjectH[480] = {0};
Byte *ptr; for(int row = 0; row < 480; row )
{
ptr = (Byte *)Image1->Picture->Bitmap->ScanLine[row];
for(int col = 0; col < 640; col )
{
if(ptr[col] == 255) // 白點
{
ProjectV[col] ; // 垂直方向投影的數量 1
ProjectH[row] ; // 水平方向投影的數量 1
}
}
}
依你實際的情況稍做調整就好了~最後ProjectV[index]中所存放的就是在index位置該column所有白點的數量(也就是垂直投影量)
|
小慶
一般會員
發表:45 回覆:31 積分:15 註冊:2004-09-29
發送簡訊給我
|
各位前輩...不好意思....前幾天小弟忙於其他事情
所以沒辦法回信....請前輩們見諒!
我把我想要的感覺用圖示....表示好了
我在書本看到的樣子......我把它剪下來
如下:一張二質化完的圖作垂直的投影
垂直的投影 但我的圖是
我想做垂直和水平的投影量(直方圖).............謝謝各位前輩的指導
正在努裡學習中的小弟....
|
arisaka_matsuri
高階會員
發表:25 回覆:205 積分:231 註冊:2003-10-19
發送簡訊給我
|
dear 小慶:
結果如下~
程式碼:
//---------------------------------------------------------------------------
#include
#pragma hdrstop #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Image2->Canvas->Brush->Color = clBlack;
Image2->Canvas->FillRect(TRect(0,0,Image2->Width,Image2->Height));
Image3->Canvas->Brush->Color = clBlack;
Image3->Canvas->FillRect(TRect(0,0,Image3->Width,Image3->Height));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// 統計水平與垂直方向的投影量
long ProjectV[640] = {0};
long ProjectH[480] = {0};
long Vmax = 0, Hmax = 0;
Byte *ptr; for(int row = 0; row < 480; row++)
{
ptr = (Byte *)Image1->Picture->Bitmap->ScanLine[row];
for(int col = 0; col < 640; col++)
{
if(ptr[col*3] == 255) // 白點
{
ProjectV[col]++; // 垂直方向投影的數量+1
ProjectH[row]++; // 水平方向投影的數量+1
if(ProjectV[col] > Vmax) Vmax = ProjectV[col]; // 統計垂直投影最大值
if(ProjectH[row] > Hmax) Hmax = ProjectH[row]; // 統計水平投影最大值
}
}
} // 畫出水平方向投影
Image2->Canvas->Pen->Color = clWhite;
for(int row = 0; row < 480; row++)
{
Image2->Canvas->MoveTo(Image2->Width, row);
Image2->Canvas->LineTo(Image2->Width * (1.0 - (double)ProjectH[row] / (double)Hmax), row);
} // 畫出垂直方向投影
Image3->Canvas->Pen->Color = clWhite;
for(int col = 0; col < 640; col++)
{
Image3->Canvas->MoveTo(col, Image3->Height);
Image3->Canvas->LineTo(col, Image3->Height * (1.0 - (double)ProjectV[col] / (double)Vmax));
}
}
//---------------------------------------------------------------------------
參考看看囉~
|
小慶
一般會員
發表:45 回覆:31 積分:15 註冊:2004-09-29
發送簡訊給我
|
非常謝謝前輩們的指導.... 本人正式此意........ 讓我終於弄懂它... 正在努力學習中的小弟....
|
肉肉初心者
一般會員
發表:0 回覆:1 積分:0 註冊:2004-10-30
發送簡訊給我
|
請問一下 你那數字的圖是在哪本書看到的,有教畫出投影量的 跟我說一下 我翻了幾乎所以的書就是沒看到
|
小慶
一般會員
發表:45 回覆:31 積分:15 註冊:2004-09-29
發送簡訊給我
|
......這位.....肉肉初心者.....
我是在一家柏克萊出版社所看到的
.........所以....... 另外......哈哈...被你發現我在這邊討論問題
該怎麼說呢......遠在天邊近在眼前....
妳應該知道我在說神麼..... 好吧....就藉著平台....讓我把話說清楚吧
其實我並沒有在意那件事....和平相處不是很好嗎....
不知道你的想法.....(我一直以為你還在意那件事)....
你準備的怎樣.....希望順利.....
|
程式初心者
一般會員
發表:1 回覆:1 積分:0 註冊:2005-09-23
發送簡訊給我
|
首先向各位先輩 問個好
我的問題是 目前已經把影像給二元化了
但是遇到水平投影跟垂值投影切割的問題
也爬了不少文
但是 看到的都是程式碼
我想要的是數學原理
請問有先輩能po 文 或者是給與鏈結網址嘛 謝謝
感激不盡
|