Matlab的round函數和OpenCV的cvRound函數的區別


Matlab的round函數和OpenCV的cvRound函數都是獲得浮點數最近的整數。

今天在調試項目時發現Matlab代碼運行結果和C++代碼運行結果略有出入,最后定位到Matlab的round函數和OpenCV的cvRound函數對於.5的處理略有區別:

以下為測試round函數的Matlab代碼:

d1 = 0.5;
d2 = -0.5;
d3 = 100.5;
d4 = -100.5;

n1 = round(d1);
n2 = round(d2);
n3 = round(d3);
n4 = round(d4);

fprintf(1, 'round(%.1f) = %d\n', d1, n1);
fprintf(1, 'round(%.1f) = %d\n', d2, n2);
fprintf(1, 'round(%.1f) = %d\n', d3, n3);
fprintf(1, 'round(%.1f) = %d\n', d4, n4);

運行結果為:

 

以下為測試cvRound函數的C代碼:

    double d1 = 0.5;
    double d2 = -0.5;
    double d3 = 100.5;
    double d4 = -100.5;

    int n1 = cvRound(d1);
    int n2 = cvRound(d2);
    int n3 = cvRound(d3);
    int n4 = cvRound(d4);

    printf("cvRound(%.1f) = %d\n", d1, n1);
    printf("cvRound(%.1f) = %d\n", d2, n2);
    printf("cvRound(%.1f) = %d\n", d3, n3);
    printf("cvRound(%.1f) = %d\n", d4, n4);

運行結果為:

 

Matlab的round函數將0.5向上入,OpenCV的cvRound函數將0.5向下舍。

根據“四舍五入”的規則,Matlab的round函數是不是更妥當呢?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM