c - 数组函数(图像处理项目)

标签 c visual-studio image-processing

我遇到了与数组函数相关的作业问题。 我想在前三行和最后三行和列处制作一个带有“0”的边框元素。首先,我能够生成 256X256 大小的数字(array[256][256])。 然后,在我生成第一个数组之后,我需要执行一些条件。例如,

  • 对于元素值 <127,从该值中减去 20。
  • 对于元素值 >127,请在该值上添加 20。
  • 如果运算后任意元素的值为<0,则为其赋值0。
  • 如果运算后任意元素的值 >255,则将值 255 赋给 它。

问题是当我再次生成时,元素的“0”边框变得不同。我如何解决它像第一个数组一样,如元素的“0”边框?

enter image description here

下面是我的 C++ 代码。

#include<stdio.h>
#include<stdlib.h>

void main()
{
    int inputimage[256][256], modifinputimage[256][256];
    int i, j;
    char ch;

    for (i = 0; i < 256; i++)
    {
        if (i < 3)
        {
            for (j = 0; j < 256; j++)
            {
                if (j < 256)
                {
                    printf("0\t");
                }

            }
        }
        else if (i >= 253)
        {
            for (j = 0; j < 256; j++)
            {
                if (j < 256)
                {
                    printf("0\t");
                }

            }
        }
        else if (i >= 3 && i <253)
        {
            for (j = 0; j < 256; j++)
            {
                if ((i >= 3 && j < 3) || (i<253 && j >= 253))
                {
                        printf("0\t");
                }


                if (j >= 3 && j < 253)
                {
                    inputimage[i][j] = rand() % 256;
                    printf("%d\t", inputimage[i][j]);

                }

            }
        }

    }

    printf("\nProceed to Contrast Adjustment ? (Press ENTER to continue)*** \n\n\n\n");
    ch = getche();

    for (i = 0; i < 256; i++)
    {
        if (i < 3)
        {
            for (j = 0; j < 256; j++)
            {
                if (j < 256)
                {
                    printf("0\t");
                }

            }
        }
        else if (i >= 253)
        {
            for (j = 0; j < 256; j++)
            {
                if (j < 256)
                {
                    printf("0\t");
                }

            }
        }
        else if (i >= 3 && i <253)
        {
            for (j = 0; j < 256; j++)
            {
                if ((i >= 3 && j < 3) || (i<253 && j >= 253))
                {
                    printf("0\t");
                }


                if (j >= 3 && j < 253)
                {
                    if (inputimage[i][j] < 127 && inputimage[i][j] >= 20)
                    {
                        modifinputimage[i][j] = inputimage[i][j] - 20;
                        printf("%1d\t", modifinputimage[i][j]);
                    }
                    if (inputimage[i][j] > 127 && inputimage[i][j] <= 235)
                    {
                        modifinputimage[i][j] = inputimage[i][j] + 20;
                        printf("%1d\t", modifinputimage[i][j]);
                    }
                    if (inputimage[i][j] <= 0)
                    {

                        modifinputimage[i][j] = inputimage[i][j];
                        printf("0\t");
                    }
                    if (inputimage[i][j] >= 255)
                    {

                        modifinputimage[i][j] = inputimage[i][j];
                        printf("255\t");
                    }

                }

            }
        }

    }

}

最佳答案

在您的修改中,您需要使用按行和列访问数组的方法,方法是在开头使用两个 for 循环来获取行和列的位置。例如

for (int i = 0; i < 256; i++){
    for(int j = 0; j < 256; j++){


    }
}

这样您就可以遍历所有行和列,并在上述条件中使用

if(i <= 3 || i >= 253){
  //here u can use the nested loop to print 0's for both first and last 3 rows
     printf("0\t");
}

// similarly for columns you can use this 

else if(j <= 3 || j >=253){

     printf("0\t");
}

else if(i > 3 && i < 253 && j > 3 && j < 253){
  //here your modification rules
}

希望这有帮助

关于c - 数组函数(图像处理项目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46589299/

相关文章:

visual-studio - Visual Studio 2012 Pro Power Tools 类/方法名称悬停工具提示

c++ - VS2008 链接到错误的 boost 库

visual-studio - Visual Studio 2005 C++ 调试器不断进入反汇编 View

c++ - 从图像中移除像素值总和 < 阈值的连通分量

C - 对指向指针的指针使用 realloc 会导致段错误

c - 如何在 if-else 语句中使用多个 execvp 调用?

c - C Union 中的 Endian 交换

c - 反向逐字打印字符串?

c++ - 我想删除背景(就像黑环)

python - 错误:OpenCV(4.1.2)/io/opencv/modules/imgcodecs/src/loadsave.cpp:715:错误:(-215:断言失败)!_img.empty()在函数 'imwrite'中