min()與max()函數於陣列上使用問題 |
答題得分者是:aftcast
|
moonsea
一般會員 發表:11 回覆:15 積分:5 註冊:2007-10-08 發送簡訊給我 |
把影像pixel讀出存入陣列做運算後變成float型態,
因為不想採用回圈找出最大值與最小值, 所以使用max()與min()兩個函式,但發生了不正確的錯誤結果: 1.min找出的不是最小值 2.max找出的值不在陣列裡面 請問是不是記憶體配置不當或是其他問題呢? [code cpp] #include #include //--- fre是影像灰階值一維陣列(8bit),ImgH與mgW為影像長寬 float Max=max( *fre ,(float)(ImgH*ImgW)); float Min=min( *fre ,(float)(ImgH*ImgW)); [/code] 因為找了蠻久大部分都在講兩個數值的比較,試過很多地方還是不正確,感謝。 |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
max 與 min 本來就是只比對二個數值,並非數列。若要比對一整個陣列找出最大或最小,應該用quick sort 之類的演算法。
可參考如下的例子 http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/ 或者用c 裡泛型演算法 min_element 和 max_element 可參考如下的例子(應該很適用你要的) http://www.cplusplus.com/reference/algorithm/max_element/
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
moonsea
一般會員 發表:11 回覆:15 積分:5 註冊:2007-10-08 發送簡訊給我 |
不知道是指標錯誤還是其他問題(fre是一個陣列的指標),
把 fre[ ] 輸出資料以手動查max, 結果跟函式的不同,有時候甚至不再輸出的數據裡, 但函式的答案與土法迴圈的max一樣, 請問是哪邊的邏輯、資料型態或是指標問題嗎? [code cpp] //---輸出資料 for(int j=0;j ListBox3->Items->Add(fre[j]); } //---用函式找出最大值位置 ListBox4->Items->Add(*max_element(fre,fre (ImgH*ImgW))); [/code] |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
|
moonsea
一般會員 發表:11 回覆:15 積分:5 註冊:2007-10-08 發送簡訊給我 |
找到原因了,
應該是前面運算有改到了資料形態所產生的問題, 經測試max與min都正確,感謝熱心幫忙。 貼出測試成功部分: [code cpp] //---最大值 ListBox4->Items->Add(*max_element(fre,fre (ImgH*ImgW))); //---最小值 ListBox4->Items->Add(*min_element(fre,fre (ImgH*ImgW))); //--->ImgH*ImgW=影像大小 //--->*max_element(fre,fre (陣列大小)) [/code]
編輯記錄
moonsea 重新編輯於 2009-04-09 10:24:50, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |