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

請問將圖片大小依30*40 pixels 切割N等分

尚未結案
shing.net
中階會員


發表:207
回覆:124
積分:66
註冊:2002-03-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-18 12:26:13 IP:211.74.xxx.xxx 未訂閱
請問將圖片大小依30*40 pixels 切割N等分 且每一等分之後還要讀出pixel作處理,但不需存檔 之較佳寫法
auslk
初階會員


發表:35
回覆:77
積分:32
註冊:2003-02-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-18 12:40:14 IP:61.219.xxx.xxx 未訂閱
您好!     其實我也是想粉久,第一次寫影像處理程式    這程式目的在儲存相關位置的陣列    若有不妥之處,請各位多多協助小弟!     以下~     注意事項:     請先拉出Image1 &Image2  Image2 必須先load 一張相同尺寸的空白影像     建議使用副程式    1.Image 輸入 轉陣列儲存  2.將陣列輸出到Image        
     // 主程式 
void __fastcall TForm1::GRAY1Click(TObject * Sender)
{
  int x =Image1->Width; 
  int y =Image1->Height;
  int *f = new int[3 * x * y];
  int *g = new int[3 * x * y];
  image_to_array(Image1, f);    // 讀取圖片至陣列      color_to_gray(x, y, f, g); //轉灰階       array_to_image(g, Image2); //輸出到圖片        Image2->Invalidate();         // 更新圖片      delete g;
  delete f;
}    //副程式     void image_to_array(TImage * Image1, int *f)
{
  int x, y;
  int h = Image1->Picture->Height;
  int w = Image1->Picture->Width;
  Byte *ptr;
  for(y = 0; y < h; y  )
  {
    ptr = (Byte *) Image1->Picture->Bitmap->ScanLine[y];        // 取得圖片第 y 
                                                                // 軸的起始位置
    for(x = 0; x < w * 3; x = x   3)
    {
      f[x   3 * w * y] = (int)ptr[x];   // 將圖片的pixel依序填入 陣列
      f[x   1   3 * w * y] = (int)ptr[x   1];
      f[x   2   3 * w * y] = (int)ptr[x   2];        }
  }
}    void array_to_image(int *g, TImage * Image2)
{
  int x, y;
  Byte *ptr;
  int h = Image2->Picture->Height;
  int w = Image2->Picture->Width;
  /*
     Graphics::TBitmap * bmp = new Graphics::TBitmap();
     bmp->Assign(Image1->Picture->Bitmap); bmp->PixelFormat = pf24bit; 
   */
  for(y = 0; y < h; y  )
  {
    ptr = (Byte *) Image2->Picture->Bitmap->ScanLine[y];        // 取得圖片第 y 
                                                                // 軸的起始位置
    for(x = 0; x < w * 3; x = x   3)
    {
      ptr[x   2] = (Byte) g[x   3 * w * y];     // 將陣列的pixel依序填入圖片
      ptr[x   1] = (Byte) g[(x   1)   3 * w * y];
      ptr[x] = (Byte) g[(x   2)   3 * w * y];
    }
  }
}    320*240 舉例:     定義第一塊區塊: 
for(j=0;j<160;j  )
for(i=0;i<120;i  )     定義第二塊區塊: 
for(j=160;j<=320;j  )
for(i=0;i<120;i  )     定義第三塊區塊: 
for(j=0;j<160;j  )
for(i=120;i<240;i  )     定義第四塊區塊: 
for(j=160;j<320;j  )
for(i=120;i<240;i  )         
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-18 13:28:26 IP:61.230.xxx.xxx 未訂閱
引言: 請問將圖片大小依30*40 pixels 切割N等分 且每一等分之後還要讀出pixel作處理,但不需存檔 之較佳寫法
你好: 如果只是要分塊讀取圖資料做處理,且不做存檔動作 個人的經驗是不需要真的把圖片切割,只要讀取時, 迴圈寫得正確,應該不會有太大的困難。以下是一個小範例 [運動估測,全域搜尋]
void fullsearchE(int**  mvx,   
                 int**  mvy,
                 byte** R, 
                 byte** C,
                 int    imgw,
                 int    imgh,
                 int    blksize,    //處理的區塊大小;
                 int    range)
{
 int i,j,x,y;
 int a,b,l,m;
 double minmse,mse;
 int width,height;
 byte **cb,**rb;
 byte **ref;      //------reference with Extend-----------------     cb=GiveImageMemory(blksize,blksize);
 rb=GiveImageMemory(blksize,blksize);     ref=ImageExtend(R,imgw,imgh,range);   //extend ( -)7 or 15;     width =(int)imgw/blksize;
 height=(int)imgh/blksize;     for(j=0,y=0;j    發表人 - jerrykuo 於 2003/12/18  13:34:41
        
roger-c
一般會員


發表:7
回覆:14
積分:4
註冊:2003-11-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-19 12:27:25 IP:218.165.xxx.xxx 未訂閱
不好意思想請問jerrykuo大大,就是關於    
for(j=0,y=0;j
由於小弟我程式能力不佳,可能問到一些無意義的東西,所以請見諒,希望能夠幫我解惑,謝謝!        發表人 - jerrykuo 於 2003/12/19  13:24:18
        
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-12-19 13:51:39 IP:61.230.xxx.xxx 未訂閱
引言: 不好意思想請問jerrykuo大大,就是關於
for(j=0,y=0;j
由於小弟我程式能力不佳,可能問到一些無意義的東西,所以請見諒,希望能夠幫我解惑,謝謝!
roger-c你好: 先說聲抱歉,小弟的本意只是給個分塊處理的範例,所以有一些小細節,並未多加 說明。 C矩陣是一張二維陣列影像,在運動估測裡稱為current frame,那段程式的目的 是抓取一個blocksize*blocksize大小的區塊,其位置在frame[y][x]。 R矩陣也是一張二維陣列影像,在運動估測裡稱為reference frame,而ref矩陣 是R矩陣向外擴張(Padding)後的影像,擴張範圍為range,那段程式的目的是抓取 ref Frame一個同cb大小的區塊,不考慮padding的range,所以同一個位置的區塊 就加上range。 整個函數的目的為:求得每個區塊的運動向量,range為搜尋範圍,blocksize為區 塊大小。
roger-c
一般會員


發表:7
回覆:14
積分:4
註冊:2003-11-20

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-12-19 21:19:15 IP:218.165.xxx.xxx 未訂閱
謝謝jerrykuo大大回覆,小弟我會再努力研究
系統時間:2024-05-10 4:53:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!