[問題] 關於C程式處理影像裁切問題

看板C_and_CPP (C/C++)作者 (MVP)時間16年前 (2009/06/10 02:16), 編輯推噓7(7017)
留言24則, 5人參與, 最新討論串1/1
想請問 我現在有一張 275*400 大小的彩色影像 我想要用一個 33*33 大小的罩窗 於影像上任意位置裁切下33*33的彩色影像大小 以下的程式碼有錯 能幫我改一改嗎 ------------------------------------------------ #include<stdio.h> #include<stdlib.h> #include<iostream> int main() { unsigned char *image; unsigned char *picture; FILE *fp,*fc; int width=275; int height=400; int x=0;//選取點位之X座標 int y=0;//選取點位之Y座標 int i;//行數 int n;//列數 printf("請輸入欲裁減位置X:\n"); scanf("%d,&x"); printf("請輸入欲裁減位置y:\n"); scanf("%d,&y"); image=new unsigned char[width*height*3]; picture=new unsigned char[(width)*(height)*3]; fp=fopen("nan.raw","rb"); fread(image,sizeof(unsigned char),width*height*3,fp); for(n=y+1;n<33;n++) { for(i=x+1;i<33;i++) { picture[33*n+i]=image[275*(y-1)+(x-1)+275*n+i]; } } fc=fopen("1.raw","wb"); fwrite(picture,sizeof(unsigned char),(33)*(33)*3,fc); printf("press any key to continue!!"); fclose(fp); fclose(fc); return 0; } ---------------------------------------------------------------------------- 其中 fwrite(picture,sizeof(unsigned char),(33)*(33)*3,fc); 這行的33*33*3會產生問題 想請大家幫忙了 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.103.122

06/10 02:44, , 1F
我猜原PO要用Adaboosting
06/10 02:44, 1F

06/10 05:11, , 2F
如果是要裁切給adaboost訓練,用繪圖軟體比較快。
06/10 05:11, 2F

06/10 09:00, , 3F
我切圖的確是要用其他軟體.但教授希望我能把程式寫出來
06/10 09:00, 3F

06/10 09:24, , 4F
程式有錯是compile有error還是執行結果不對??
06/10 09:24, 4F

06/10 09:25, , 5F
小弟我總是對說程式有錯卻又不說錯在哪的實在很無力Orz
06/10 09:25, 5F

06/10 09:26, , 6F
眼前明顯看得到的是scanf()那邊不知貼錯還寫錯了@_@"
06/10 09:26, 6F

06/10 09:29, , 7F
V兄眼睛很利
06/10 09:29, 7F

06/10 09:34, , 8F
因為code還不算長啦, 太長的就直接end了....Orz
06/10 09:34, 8F

06/10 09:35, , 9F
另外, 那個巢狀迴圈似乎不會跑完33x33個pixel....@_@"
06/10 09:35, 9F

06/10 09:36, , 10F
還有275既然已經是width了, 後面最好別用magic no的寫法
06/10 09:36, 10F

06/10 09:37, , 11F
還有既然是彩色影像, 加上fwrite這樣的寫法, 估計至少要
06/10 09:37, 11F

06/10 09:38, , 12F
有3個channel, 那picture[]=image[]那似乎少copy很多@@
06/10 09:38, 12F

06/10 12:18, , 13F
scanf那邊貼錯...其實compile和error都沒錯.圖也能跑出來
06/10 12:18, 13F

06/10 12:19, , 14F
只是覺得圖出來怪怪的
06/10 12:19, 14F

06/10 12:30, , 15F
做影像處理的話, 應該聽過一句名言....
06/10 12:30, 15F

06/10 12:30, , 16F
A picture is worth a thousand words
06/10 12:30, 16F

06/10 12:32, , 17F
覺得圖有問題就貼圖; 不然小弟我挺好奇您是如何判斷出來
06/10 12:32, 17F

06/10 12:32, , 18F
fwrite這行code有問題??
06/10 12:32, 18F

06/10 12:33, , 19F
純看code的話, 小弟我推測就和上面zlw大後面推文那樣;
06/10 12:33, 19F

06/10 12:34, , 20F
picture[]=image[]那邊的迴圈沒有做滿33x33個pixel....
06/10 12:34, 20F

06/10 12:34, , 21F
每個pixel也沒有做滿3個channel, 所以應該裁出很怪的結
06/10 12:34, 21F

06/10 12:35, , 22F
果XD 雖然說我不太懂取image[]裡怎麼那麼複雜就是Orz
06/10 12:35, 22F

06/10 12:50, , 23F
對了, 既然沒有format convert, 用memcpy應該會容易點@@
06/10 12:50, 23F

06/10 12:51, , 24F
不過用memcpy或直接迴圈copy最好都check一下邊界問題:)
06/10 12:51, 24F
文章代碼(AID): #1ABgSNvr (C_and_CPP)
文章代碼(AID): #1ABgSNvr (C_and_CPP)