下面是一个代码:错误:返回值类型不匹配的功能类型
#include<stdio.h>
#include<math.h>
float conv2D(int rowsKernel, int colsKernel, int rowsImage, int colsImage, float kernel[][5], int image[][15], float imageConvolved[][11]); //Function Prototype definition
float conv2D(int rowsKernel, int colsKernel, int rowsImage, int colsImage, float kernel[][5], int image[][15], float imageConvolved[][11])
{
int kernelSize; //This variable represents the size of the Gaussian kernel
int i; //variable which controls the rows of an image
int j; //variable which controls the columns of an image
int ii; //variable which controls the rows of the kernel
int jj; //variable which controls the columns of the kernel
float sum; //variable that holds the result of convolution for a particular pixel of an image
//float imageConvolved;//Result of an image convolved by a Gaussian kernel
int imagePixel;
float kernelPixel;
kernelSize = colsKernel; /*Since we consider a square kernel, then rowsKernel=colsKernel, which implies that the size of the kernel (kernelSize) equals either of these two variables (that is, kernelSize=colsKernel=rowsKernel) */
for (i = kernelSize/2; i < rowsImage - kernelSize/2; i++) // perform iteration through the rows of an image
{
for (j = kernelSize/2; j < colsImage - kernelSize/2; j++) // perform iteration through the columns of an image
{
sum = 0; /*Initializing the accumulator. This variable will finally contain the convolution result for a particular pixel */
for (ii = -kernelSize/2; ii <= kernelSize/2; ii++) // perform iteration through the rows of a kernel
{
for (jj = -kernelSize/2; jj <= kernelSize/2; jj++) //perform iteration through the columns of a kernel
{
imagePixel = image[i + ii][j + jj];
kernelPixel = kernel[ii + kernelSize/2][jj + kernelSize/2];
sum += imagePixel * kernelPixel;
}
}
imageConvolved[i - kernelSize/2][j - kernelSize/2] = sum;
}
}
return (imageConvolved); // convolved image
}
int main()
{
float gauss[][5] = {
{1, 1, 1, 1, 1},
{1, 1, 1, 1, 1},
{1, 1, 1, 1, 1},
{1, 1, 1, 1, 1},
{1, 1, 1, 1, 1}
};
int img[][15] = {
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
};
int rowsK = 5, colsK = 5, rowsI = 15, colsI = 15;
float result[11][11];
float Iconv[11][11];
Iconv = conv2D(rowsK, colsK, rowsI, colsI, gauss, img, result);
return 0;
}
我修改了代码作为一种尝试,试图解决这个问题。但是,我得到两个错误(使用的CCStudio V3.3):
"convolution.c", line 39: error: return value type does not match the function type "convolution.c", line 71: error: expression must be a modifiable lvalue
请粘贴**真实代码**,包括每个参数及其类型的声明,**作为代码**;没有被埋入一段。你的描述,“这个函数中的参数被声明为浮点结果,int rowsK,int colsK,int rowsI和int colsI”,它很容易丢失最后两个参数类型,如果它不明显,它们是至关重要的找到你的问题。因此讽刺的是,他们不包括在内。总之,不要只告诉我们“关于”你的代码; **展示下**。 – WhozCraig
什么是'imageConvolved'?您可以将它作为二维数组访问并将其作为“float”返回。你要哪个?另外,我同意上述评论。你的问题在眼睛上很难。包含代码作为代码块,而不是作为段落内的粗体块。 – paddy
你说imageConvolved被定义为float,但是你表现得像2D数组。并且你从返回float的函数返回它,所以它看起来是一个纯粹的float值,你试图用作二维数组..如果你只是复制和粘贴你的代码可能会更好.. – phoad