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函数是不是更妥当呢?

posted @ 2016-09-06 10:36  你是我的盐  阅读(3382)  评论(0编辑  收藏  举报