Re: [問題] 用迴圈跑sprintf 讀圖有問題

看板C_and_CPP作者 (俏皮一哥)時間14年前 (2011/08/17 17:31), 編輯推噓2(2021)
留言23則, 4人參與, 最新討論串2/2 (看更多)
我請我朋友看了一下 但還是找不出哪裡有問題 有點急 >< 我說一下我的程式架構好了 int main() { char FileName[100], OutName[100], Dep[100]; for(int Number=1; Number<=50; Number++) { sprintf(Dep, "%ddep.bmp", Number); sprintf(FileName, "%d.bmp", Number); sprintf(OutName, "%d_l2.bmp", Number); get_depth(Dep); get_raw(FileName, OutName); } } int get_depth(const char *fname_d) int get_raw(const char *fname_s, const char *fname_t) 流程大致上是這樣 在 get_depth 函式裡讀取深度資訊 在 get_raw 函式讀取bmp圖的 R G B 資訊還有大小等等 get_raw 讀取完圖檔資訊後 在這函式裡面又用了另外兩個 depth_section() 和 shift() 函式 depth_section 函式則是利用函式 get_depth 讀到的資訊 來將深度做分段 而 shift 函式就是將剛剛所做的分段來位移 不同深度有不同位移量 最後 get_raw 函式的最後面會將位移後的新圖寫入 產生一張新的圖出來 我在 get_raw 函式裡面有印出 *fname_s 和 *fname_t 都是正確的 在 get_depth 函式裡也有印出 *fname_d 也是正確的 表示都有讀到不同張的圖 我用 fp_s = fopen(fname_s, "rb") 來開圖 最後也有用fclose(fp_s); 來close 掉 使用malloc 最後也有free掉 我還試了另一個 就是拿掉 depth_section 這函式 就單純讀檔和shift這樣 但結果還是一樣 都只能讀到第一張 讀了不管幾張進來 產生新的圖每張都一樣 整個不知道怎麼辦了 >< 弄了好幾天了有點急 這裡附上程式碼 http://0rz.tw/UYRj2 感謝了 ※ 引述《skatekid (俏皮一哥)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : Dev : 問題(Question): : 我寫了一個程式 用來處理五十張的彩色原圖和原圖的黑白深度圖 : 這程式是拿原圖和利用黑白深度圖的深度資訊來做位移(越亮部分位移越多) : 然後再將位移後的新圖輸出來 : 我是用迴圈跑 使用sprintf這函式 : 可是跑出來的結果都是第一張圖的結果(每張圖都不同) : 也就是我讀入 1.bmp 2.bmp 3.bmp.......50.bmp 和深度圖 1dep.bmp 2dep.bmp..... : 也順利產生 1_new.bmp 2_new.bmp 3_new.bmp.....50_new.bmp : 但是新出來的這五十張 每張都跟第一張長一樣 冏 : 想了好久想不透問題是什麼 : 求大家幫忙了THX : 餵入的資料(Input): : bmp圖檔 720x576 : 程式碼(Code):(請善用置底文網頁, 記得排版) : char FileName[100], OutName[100], Dep[100]; : for(int Number=1; Number<=50; Number++) : { : sprintf(Dep, "%ddep.bmp", Number); // 深度圖 : sprintf(FileName, "%d.bmp", Number); // 原圖 : sprintf(OutName, "%d_new.bmp", Number); // 輸出的圖 : get_depth(Dep); // 讀取深度圖函式 : get_raw(FileName, OutName); // 演算法 : } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.168.200 ※ 編輯: skatekid 來自: 140.117.168.200 (08/17 17:34)

08/17 17:48, , 1F
怎麼不掛opencv...?
08/17 17:48, 1F

08/17 17:54, , 2F
程式碼先簡化成"只讀圖",也比較好trace.
08/17 17:54, 2F

08/17 17:55, , 3F
你那些圖都可以讀進來,再去把image processing的程式加
08/17 17:55, 3F

08/17 17:55, , 4F
上去.
08/17 17:55, 4F

08/17 18:02, , 5F
"都只能讀到第一張 讀了不管幾張進來 產生新的圖每張都
08/17 18:02, 5F

08/17 18:02, , 6F
一樣"
08/17 18:02, 6F

08/17 18:03, , 7F
你要怎麼拆解你遇到的bug?
08/17 18:03, 7F

08/17 18:04, , 8F
1~3推是我心裡的第一步驟, 等你驗過了之後, 再來講第二
08/17 18:04, 8F

08/17 18:04, , 9F
第三步驟.
08/17 18:04, 9F

08/17 20:12, , 10F
何不判斷fread有沒有成功呢
08/17 20:12, 10F

08/17 20:24, , 11F
看到程式碼...好想大改...
08/17 20:24, 11F

08/17 20:27, , 12F
我相當懷疑這有清除之前的資料嗎....
08/17 20:27, 12F

08/17 22:42, , 13F
做個上色整理http://pastie.org/2386160
08/17 22:42, 13F

08/17 23:31, , 14F
愈整理愈覺得潛在的問題有點多http://pastie.org/2386410
08/17 23:31, 14F

08/17 23:53, , 15F
好感謝哦 花那麼多時間看我的code~~~
08/17 23:53, 15F

08/18 00:03, , 16F
你需要去重新檢視你的算法...
08/18 00:03, 16F

08/18 00:03, , 17F
尤其是處理圖的部份...
08/18 00:03, 17F

08/18 00:04, , 18F
還有就是資料清空...
08/18 00:04, 18F

08/18 00:07, , 19F
問一下 資料清空是大概哪個地方嗎?
08/18 00:07, 19F

08/18 00:11, , 20F
image_shift image_in這兩個部份
08/18 00:11, 20F

08/18 00:12, , 21F
會出現與第一張一樣的情況有很大的部份是未重新初始化
08/18 00:12, 21F

08/18 00:14, , 22F
而且你還有不當存取記憶體的情形
08/18 00:14, 22F

08/18 03:41, , 23F
清掉囉 太感謝了
08/18 03:41, 23F
文章代碼(AID): #1EIufjku (C_and_CPP)
文章代碼(AID): #1EIufjku (C_and_CPP)