線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1471
推到 Plurk!
推到 Facebook!

如何算出一個image的投影總量

尚未結案
imjoshua
一般會員


發表:36
回覆:21
積分:11
註冊:2005-03-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-08 17:17:36 IP:220.139.xxx.xxx 未訂閱
我的圖是256*256的經爬之前的文章已可顯示出黑色投影量,請問我要用累加的方式從圖0~255顯示出一張圖的總投影量顯示在如Label1上應如何改比較好呢?謝謝! void __fastcall TForm1::Button1Click(TObject *Sender) { // 統計水平與垂直方向的投影量 long ProjectV[256] = {0}; long ProjectH[256] = {0}; long Vmax = 0, Hmax = 0; Byte *ptr; for(int row = 0; row < 256; row++) { ptr = (Byte *)Image1->Picture->Bitmap->ScanLine[row]; for(int col = 0; col < 256; col++) { if(ptr[col*3] == 0)//黑點 { ProjectV[col]++; // 垂直方向投影的數量+1 ProjectH[row]++; // 水平方向投影的數量+1 if(ProjectV[col] > Vmax) Vmax = ProjectV[col]; // 統計垂直投影最大值 if(ProjectH[row] > Hmax) Hmax = ProjectH[row]; // 統計水平投影最大值 } } } } 參考資料 http://delphi.ktop.com.tw/topic.php?topic_id=58197 打擾您保貴的閱讀時間在此跟您說聲抱歉!! 發表人 - imjoshua 於 2005/05/08 17:25:49 發表人 - imjoshua 於 2005/05/08 22:36:40
------
joshua
snake720105
一般會員


發表:7
回覆:12
積分:3
註冊:2005-02-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-18 15:43:26 IP:220.228.xxx.xxx 未訂閱
請問Byte *ptr的用意何在,是C裡的語法嗎??還是BCB裡的語法,可否有詳細的說明,或者提供有詳細的書籍,請指教,謝謝 輕步玉階飛夜色~~ 不勝蕭然掩月來~~
------
輕步玉階飛夜色~~
不勝蕭然掩月來~~
smilebye
一般會員


發表:21
回覆:33
積分:10
註冊:2004-01-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-22 13:06:14 IP:61.228.xxx.xxx 未訂閱
引言: 我的圖是256*256的經爬之前的文章已可顯示出黑色投影量,請問我要用累加的方式從圖0~255顯示出一張圖的總投影量該如何做呢?謝謝! void __fastcall TForm1::Button1Click(TObject *Sender) { // 統計水平與垂直方向的投影量 long ProjectV[256] = {0}; long ProjectH[256] = {0}; long Vmax = 0, Hmax = 0; Byte *ptr; for(int row = 0; row < 256; row++) { ptr = (Byte *)Image1->Picture->Bitmap->ScanLine[row]; for(int col = 0; col < 256; col++) { if(ptr[col*3] == 0)//黑點 { ProjectV[col]++; // 垂直方向投影的數量+1 ProjectH[row]++; // 水平方向投影的數量+1 if(ProjectV[col] > Vmax) Vmax = ProjectV[col]; // 統計垂直投影最大值 if(ProjectH[row] > Hmax) Hmax = ProjectH[row]; // 統計水平投影最大值 } } } } 參考資料 http://delphi.ktop.com.tw/topic.php?topic_id=58197
從圖0~255顯示出一張圖的總投影量???不懂你問的意思 程式
------
我是新手,程式設計的菜鳥>< 嗚~請多幫忙唷!
imjoshua
一般會員


發表:36
回覆:21
積分:11
註冊:2005-03-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-23 12:29:14 IP:61.228.xxx.xxx 未訂閱
您好,就好像      這張圖橫軸代表座標位置,縱軸代表黑色像素個數;這是一張256*256的圖 我想算出投影量的總total(並不是最大值哦這張圖最大值由圖得知應是62左右..) 可以這樣改嗎? void __fastcall TForm1::Button1Click(TObject *Sender) { // 統計水平與垂直方向的投影量 long ProjectV[256] = {0}; long ProjectH[256] = {0}; long Vmax = 0, Hmax = 0; long sumtotal = 0 ;//我新加的 Byte *ptr; for(int row = 0; row < 256; row++) { ptr = (Byte *)Image1->Picture->Bitmap->ScanLine[row]; for(int col = 0; col < 256; col++) { if(ptr[col*3] == 0) { ProjectV[col]++; // 垂直方向投影的數量+1 sumtotal += ProjectV[col];//這樣算這張圖的垂直投影總值嗎? ProjectH[row]++; // 水平方向投影的數量+1 if(ProjectV[col] > Vmax) Vmax = ProjectV[col]; // 統計垂直投影最大值 if(ProjectH[row] > Hmax) Hmax = ProjectH[row]; // 統計水平投影最大值 Edit1->Text = sumtotal ;//把值放在Edit測試 } } } //垂直投影曲線 TLineSeries* Series1 = new TLineSeries(this); Series1->ParentChart = Chart1; for(int col = 0; col < 256; col++) Series1->AddXY(col, ProjectV[col], "", clRed); } 打擾您保貴的閱讀時間在此跟您說聲抱歉!! 發表人 - imjoshua 於 2005/05/23 12:32:31 發表人 - imjoshua 於 2005/05/23 12:39:14
------
joshua
smilebye
一般會員


發表:21
回覆:33
積分:10
註冊:2004-01-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-24 23:34:26 IP:220.135.xxx.xxx 未訂閱
引言: TLineSeries* Series1 = new TLineSeries(this); Series1->ParentChart = Chart1; for(int col = 0; col < 256; col ) Series1->AddXY(col, ProjectV[col], "", clRed);
imjoshua您好:
     int sum = 0;
     for(int col = 0; col < 256; col  )
        sum = ProjectV[col];           //將每一行的投影量加總
不知道是不是你要的 程式
------
我是新手,程式設計的菜鳥>< 嗚~請多幫忙唷!
Fm
初階會員


發表:19
回覆:66
積分:37
註冊:2003-10-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-25 01:21:52 IP:61.62.xxx.xxx 未訂閱
imjoshua你好 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=63079
//新手上路,請多包涵。
/*青青子矜,悠悠我心。但為君故,沈吟至今。*/
.. ...沒看到累加.....但是以經po了,無法拿掉... 發表人 -
imjoshua
一般會員


發表:36
回覆:21
積分:11
註冊:2005-03-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-27 00:07:00 IP:220.136.xxx.xxx 未訂閱
smilebye 您好:    如果跟您講的一樣;其實小弟上面修改後的程式應就不需做更動了嗎? 如果沒錯的話就會如下圖: < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=22507217&CC=503363"> 但是奇怪的是我用全黑色的圖去做測試竟然總影量高達8421376會不會太誇張@@"應該是256(黑色投影量)*256(座標位置)=65536 如下圖才是... 但小弟只是改了Edit1->Text = sumtotal /128.5;//把值放在Edit測試至於為什麼要乘128.5小弟也不知道原因只是這樣測剛好可以變65536的值…是瞎貓碰上死耗子嗎? 打擾您保貴的閱讀時間在此跟您說聲抱歉!!
------
joshua
smilebye
一般會員


發表:21
回覆:33
積分:10
註冊:2004-01-18

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-05-27 00:45:17 IP:220.135.xxx.xxx 未訂閱
imjoshua您好: 改成這樣試試
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   long ProjectV[256]={0};
   long ProjectH[256]={0};
   long Vmax = 0, Hmax = 0;
   long sumtotal = 0;       Byte *ptr;
   for(int row=0;row<256;row  )
   {
      ptr = (Byte*)Image1->Picture->Bitmap->ScanLine[row];
      for(int col=0;col<256;col  )
      {
         if(ptr[col*3]==0)
         {
            //ProjectV[col]  ;
            sumtotal  ; 
            if(ProjectV[col]> Vmax) Vmax = ProjectV[col];
            if(ProjectH[row]> Hmax) Hmax = ProjectH[row];                 }
      }
   }
   ShowMessage(sumtotal);
} 
大家好...我是程式設計的肉腳 還請多幫忙唷~ 發表人 - smilebye 於 2005/05/27 00:50:39
------
我是新手,程式設計的菜鳥>< 嗚~請多幫忙唷!
imjoshua
一般會員


發表:36
回覆:21
積分:11
註冊:2005-03-16

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-05-27 03:03:40 IP:61.228.xxx.xxx 未訂閱
謝謝smilebye大大 我學到很多謝謝! 打擾您保貴的閱讀時間在此跟您說聲抱歉!!
------
joshua
系統時間:2024-04-28 20:13:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!