首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cs50 pset4滤波器灰度舍入函数问题

Cs50 pset4滤波器灰度舍入函数问题
EN

Stack Overflow用户
提问于 2020-08-15 22:31:08
回答 2查看 756关注 0票数 1

我正在使用cs50 pset4 filter(不太舒服)灰度,如果数字是小数,我必须对它们进行舍入。但出于某种原因,check50打印了以下内容:

代码语言:javascript
复制
:( grayscale correctly filters single pixel without whole number average
    expected "28 28 28\n", not "27 27 27\n"

:( grayscale correctly filters more complex 3x3 image
    expected "20 20 20\n50 5...", not "20 20 20\n50 5..."

:( grayscale correctly filters 4x4 image
    expected "20 20 20\n50 5...", not "20 20 20\n50 5..."

这些只是一张悲伤的脸。这是我的代码:

代码语言:javascript
复制
void grayscale(int height, int width, RGBTRIPLE image[height][width])
{
    for(int j = 0; j < width; j++)
        for(int i = 0; i < height; i ++) {
            double av = (image[i][j].rgbtGreen + image[i][j].rgbtRed + image[i][j].rgbtBlue)/3;
            int average = round(av);
            image[i][j].rgbtGreen = average;
            image[i][j].rgbtRed = average;
            image[i][j].rgbtBlue = average;
        }
}

round函数如下:

代码语言:javascript
复制
 int average = round(av);

但根据check50的说法,它不起作用。请帮我弄清楚。我唯一的怀疑是我对c是个新手,所以我的函数可能有问题。我试着用谷歌搜索了一下,但什么都说不通。我确实有

代码语言:javascript
复制
 #include<math.h>

我的代码中的一部分,就在我展示给你的部分之上。

谢谢,迷失在代码中:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-15 22:53:19

这似乎是分裂的结果

代码语言:javascript
复制
(image[i][j].rgbtGreen + image[i][j].rgbtRed + image[i][j].rgbtBlue)/3

被截断,因为所有成员都是整数。

试一试

代码语言:javascript
复制
(image[i][j].rgbtGreen + image[i][j].rgbtRed + image[i][j].rgbtBlue)/3.0

(使用3.0而不是3

票数 3
EN

Stack Overflow用户

发布于 2020-08-15 23:09:36

使用浮点型而不是双精度数据类型

代码语言:javascript
复制
float av = (image[i][j].rgbtGreen + image[i][j].rgbtRed + image[i][j].rgbtBlue)/3.0

请使用3.0,因为在某些情况下,您的值可能是整数,因此不会舍入到最接近的整数

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63427139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档