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

如何對圖片做馬賽克的效果??

尚未結案
qq2141
一般會員


發表:4
回覆:3
積分:1
註冊:2004-12-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-11 00:02:40 IP:211.76.xxx.xxx 未訂閱
遇到影像處理的問題 對一個圖片可以選取某範圍加上馬賽克該如何設計呢??? 要對RGB值做什麼樣的處裡 可否請高手們給予指點^^ 謝謝!!
TheMoon
中階會員


發表:17
回覆:95
積分:67
註冊:2002-06-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-11 00:27:24 IP:61.230.xxx.xxx 未訂閱
您好,
您可在影像選取的特定區域中分割成一個一個的區塊進行處理,
區塊大小可自訂,
然後在每一區塊中計算色點的平均值,
再以此平均值填入此區塊的各點。    a|b|c                              m|m|m
d|e|f → m=(a b c d e f g h i)/9 → m|m|m
g|h|i                              m|m|m    試試看吧     
        
qq2141
一般會員


發表:4
回覆:3
積分:1
註冊:2004-12-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-11 14:28:52 IP:211.76.xxx.xxx 未訂閱
引言:
您好,
您可在影像選取的特定區域中分割成一個一個的區塊進行處理,
區塊大小可自訂,
然後在每一區塊中計算色點的平均值,
再以此平均值填入此區塊的各點。    a|b|c                              m|m|m
d|e|f → m=(a b c d e f g h i)/9 → m|m|m
g|h|i                              m|m|m    試試看吧     
< face="Verdana, Arial, Helvetica">
不好意思
請問我該怎麼取得特定區域的位置做轉換呢???
Pixels[i][j],(i,j)=螢幕上點座標嗎??
那如果想使用ScanLine[y]我該怎麼寫呢??
我陷在卡在如何取得特定區域的影像每個pixel的rgb值
我該怎麼知道我取得的範圍的長寬??
可否請您給點指點呢!!
或是有範例可以說明會更明白
謝謝你     
        
yaozong
一般會員


發表:5
回覆:7
積分:2
註冊:2004-10-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-12 16:26:42 IP:61.59.xxx.xxx 未訂閱
就如同TheMoon大大所說的,你可以將圖片分為n個區塊,我這裡就舉3*3個區塊 為例子,當你把圖片分為3*3個區塊時,第一個區塊pixels的範圍就在 (0,0)~((image->width/6),(image->height/6))之內,任意抓某一個pixels的 color,在將其他在此區塊內pixels的color都等於剛剛所抓的color 做完後在跑下一個區塊,當你的區塊取的個數越多,所呈現的馬賽克會越接近底色. 這個方法給你做個參考吧
qqmax
一般會員


發表:17
回覆:26
積分:8
註冊:2004-11-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-13 19:07:42 IP:211.76.xxx.xxx 未訂閱
引言: 就如同TheMoon大大所說的,你可以將圖片分為n個區塊,我這裡就舉3*3個區塊 為例子,當你把圖片分為3*3個區塊時,第一個區塊pixels的範圍就在 (0,0)~((image->width/6),(image->height/6))之內,任意抓某一個pixels的 color,在將其他在此區塊內pixels的color都等於剛剛所抓的color 做完後在跑下一個區塊,當你的區塊取的個數越多,所呈現的馬賽克會越接近底色. 這個方法給你做個參考吧 < face="Verdana, Arial, Helvetica"> 其實我對如何取到那幾點再取平均值的程式與法實在想不出來 可以給點建議嗎??^^謝謝
TheMoon
中階會員


發表:17
回覆:95
積分:67
註冊:2002-06-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-13 19:42:07 IP:202.39.xxx.xxx 未訂閱
假設您選取的範圍是在(StratX,StartY)~(EndX,EndY)之間,
且您的區塊大小設為3X3,
那麼用ScanLine的作法可參考如下:
(假設影像是24-bits Color Image存放於Img1物件中)
(程式未做詳細的邊界判斷,請自行修改)    Byte *ptr1, *ptr2, *ptr3;
Byte *rptr1,*rptr2, *rptr3;
Byte R,G,B;
int i,j,k;    Graphics::TBitmap *bmp = new Graphics::TBitmap(); //暫存結果
bmp->Height=EndY-StartY 1;
bmp->Width=EndX-StartX 1;
bmp->PixelFormat=pf24bit;    for(i=StartY; iPicture->Bitmap->ScanLine[i];
   ptr2=(Byte *)Img1->Picture->Bitmap->ScanLine[i 1];
   ptr3=(Byte *)Img1->Picture->Bitmap->ScanLine[i 2];
   rptr1=(Byte *)bmp->ScanLine[i-StartY];
   rptr2=(Byte *)bmp->ScanLine[i-StartY 1];
   rptr3=(Byte *)bmp->ScanLine[i-StartY 2];       for(j=StartX; j     
        
qqmax
一般會員


發表:17
回覆:26
積分:8
註冊:2004-11-22

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-13 21:47:09 IP:211.76.xxx.xxx 未訂閱
引言:
假設您選取的範圍是在(StratX,StartY)~(EndX,EndY)之間,
且您的區塊大小設為3X3,
那麼用ScanLine的作法可參考如下:
(假設影像是24-bits Color Image存放於Img1物件中)
(程式未做詳細的邊界判斷,請自行修改)    Byte *ptr1, *ptr2, *ptr3;
Byte *rptr1,*rptr2, *rptr3;
Byte R,G,B;
int i,j,k;    Graphics::TBitmap *bmp = new Graphics::TBitmap(); //暫存結果
bmp->Height=EndY-StartY 1;
bmp->Width=EndX-StartX 1;
bmp->PixelFormat=pf24bit;    for(i=StartY; iPicture->Bitmap->ScanLine[i];
   ptr2=(Byte *)Img1->Picture->Bitmap->ScanLine[i 1];
   ptr3=(Byte *)Img1->Picture->Bitmap->ScanLine[i 2];
   rptr1=(Byte *)bmp->ScanLine[i-StartY];
   rptr2=(Byte *)bmp->ScanLine[i-StartY 1];
   rptr3=(Byte *)bmp->ScanLine[i-StartY 2];       for(j=StartX; j     
對不起再請問一下你的StarX,Y和EndX,Y是代表哪兩點呢 長方形的佐上跟右下點嗎??? 謝謝
TheMoon
中階會員


發表:17
回覆:95
積分:67
註冊:2002-06-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-12-14 10:34:05 IP:202.39.xxx.xxx 未訂閱
引言: 對不起再請問一下你的StarX,Y和EndX,Y是代表哪兩點呢 長方形的佐上跟右下點嗎??? 謝謝
Yes 建議您先試試看做整張影像的馬賽克效果, 測試成功後再去做選擇區域的馬賽克效果, 因為做整張影像的情況比較單純, 且要判斷的條件也比較少。
qqmax
一般會員


發表:17
回覆:26
積分:8
註冊:2004-11-22

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-12-14 19:19:21 IP:211.76.xxx.xxx 未訂閱
引言:
引言: 對不起再請問一下你的StarX,Y和EndX,Y是代表哪兩點呢 長方形的佐上跟右下點嗎??? 謝謝
Yes 建議您先試試看做整張影像的馬賽克效果, 測試成功後再去做選擇區域的馬賽克效果, 因為做整張影像的情況比較單純, 且要判斷的條件也比較少。 < face="Verdana, Arial, Helvetica"> 嗯嗯我懂了 謝謝你的精闢講解 for(k=0; k<3; k ) { rptr1[(j-StartX k)*3]=rptr2[(j-StartX k)*3]=rptr3[(j-StartX k)*3]=B; rptr1[(j-StartX k)*3 1]=rptr2[(j-StartX k)*3 1]=rptr3[(j-StartX k)*3 1]=G; rptr1[(j-StartX k)*3 2]=rptr2[(j-StartX k)*3 2]=rptr3[(j-StartX k)*3 2]=R; } 可已在問一下以上FOR迴圈邏輯怎麼想的 j-StartX k不會<0嗎????
TheMoon
中階會員


發表:17
回覆:95
積分:67
註冊:2002-06-05

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-12-15 15:18:17 IP:202.39.xxx.xxx 未訂閱
引言: 嗯嗯我懂了 謝謝你的精闢講解 for(k=0; k<3; k ) { rptr1[(j-StartX k)*3]=rptr2[(j-StartX k)*3]=rptr3[(j-StartX k)*3]=B; rptr1[(j-StartX k)*3 1]=rptr2[(j-StartX k)*3 1]=rptr3[(j-StartX k)*3 1]=G; rptr1[(j-StartX k)*3 2]=rptr2[(j-StartX k)*3 2]=rptr3[(j-StartX k)*3 2]=R; } 可已在問一下以上FOR迴圈邏輯怎麼想的 j-StartX k不會<0嗎????
不好意思, 為了縮短程式篇幅造成您閱讀程式上的困擾。 說明如下: (1) j的初設值為StartX,所以(j-StartX k)會>=0。 (2) 由於在3X3的區塊中,每個row都有3個點, 所以用for(k=0; k<3; k )來做, 以k移動指向每個點的起始位址。 (3) 接著迴圈內的程式意義如下: rptr1[(j-StartX k)*3 0]=B; rptr2[(j-StartX k)*3 0]=B; rptr3[(j-StartX k)*3 0]=B; rptr1[(j-StartX k)*3 1]=G; rptr2[(j-StartX k)*3 1]=G; rptr3[(j-StartX k)*3 1]=G; rptr1[(j-StartX k)*3 2]=R; rptr2[(j-StartX k)*3 2]=R; rptr3[(j-StartX k)*3 2]=R; 因為每個Pixel佔3個Bytes, 所以(j-StartX k)*3, 又每個Byte分別代表B,G,R, 所以有 0, 1, 2的區別。
chatman
一般會員


發表:7
回覆:2
積分:1
註冊:2004-10-07

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-12-16 02:21:09 IP:220.139.xxx.xxx 未訂閱
引言:
假設您選取的範圍是在(StratX,StartY)~(EndX,EndY)之間,
且您的區塊大小設為3X3,
那麼用ScanLine的作法可參考如下:
(假設影像是24-bits Color Image存放於Img1物件中)
(程式未做詳細的邊界判斷,請自行修改)    Byte *ptr1, *ptr2, *ptr3;
Byte *rptr1,*rptr2, *rptr3;
Byte R,G,B;
int i,j,k;    Graphics::TBitmap *bmp = new Graphics::TBitmap(); //暫存結果
bmp->Height=EndY-StartY 1;
bmp->Width=EndX-StartX 1;
bmp->PixelFormat=pf24bit;    for(i=StartY; i && (i 2)Picture->Bitmap->ScanLine[i];
   ptr2=(Byte *)Img1->Picture->Bitmap->ScanLine[i 1];
   ptr3=(Byte *)Img1->Picture->Bitmap->ScanLine[i 2];
   rptr1=(Byte *)bmp->ScanLine[i-StartY];
   rptr2=(Byte *)bmp->ScanLine[i-StartY 1];
   rptr3=(Byte *)bmp->ScanLine[i-StartY 2];       for(j=StartX; j
發表人 - chatman 於 2004/12/16 02:25:41
系統時間:2024-05-20 22:22:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!