2010-04-20 108 views
-1

我有这个功能半的工作,但似乎散发出来的图像过于模糊。这是因为它处理已经模糊的部分,我想象?图像过分模糊?需要避免的是处理已经模糊部分

有人告诉我,我需要把它写入到一个新的图像,但我无法弄清楚如何创建这一点。当我使用Image tempImage构造函数时,我得到了分段错误的错误,无法确定原因。在此之前的功能,有一个功能scaleUp,使图像变大并保存到newImage.pixelData,由构造Image newImage(width*numTimes, height*numTimes, colorMode);

void Image::simpleBlur(int numPixels) 
     { 
      int middlePixX, middlePixY, redSum, greenSum, blueSum, denominator = 0;  

      //Image tempImage(width, height, colorMode); 
      //tempImage.createImage(width, height); 

      for (int middlePixX = 0; middlePixX < width; middlePixX++) 
      { 
       for (int middlePixY = 0; middlePixY < height; middlePixY++) 
       { 
       for (int x_subgrid = -1*numPixels; x_subgrid <= numPixels; x_subgrid++) //for (int x_subgrid = 0; x_subgrid < DIM_SQUARE; x_subgrid++) 
       { 
        for (int y_subgrid = -1*numPixels; y_subgrid <= numPixels; y_subgrid++) //for (int y_subgrid = 0; y_subgrid < DIM_SQUARE; y_subgrid++) 
        { 
         int xPos = x_subgrid + middlePixX; 
         int yPos = y_subgrid + middlePixY; 

       if(xPos >= 0 && xPos < width && yPos >= 0 && yPos < height) 
         {    
          redSum = redSum + pixelData[xPos][yPos].getRed(); 
          greenSum = greenSum + pixelData[xPos][yPos].getGreen(); 
          blueSum = blueSum + pixelData[xPos][yPos].getBlue(); 
          denominator++; 
         } 
        } 
       } 
       redSum = redSum/denominator; 
       greenSum = greenSum/denominator; 
       blueSum = blueSum/denominator; 
       pixelData[middlePixX][middlePixY].setRed(redSum); 
       pixelData[middlePixX][middlePixY].setGreen(greenSum); 
       pixelData[middlePixX][middlePixY].setBlue(blueSum); 

       redSum, greenSum, blueSum = 0; denominator = 0; 
       } 
      } 
     } 
+0

什么是图像?你在做什么来获得段错误?我的猜测是你在修改'Image',所以你需要其中一个去检查,另一个去写,所以我想知道为什么你不能创建另一个。最后,你的问题是什么? – 2010-04-20 21:40:08

+0

图像是一个类。 我用'图片tempImage(宽度,高度,colorMode);'来创建新的图像(模糊的一个),并试图写它,但它似乎在被调用段错误。 我的问题是,是功能中的正确步骤,还有其他问题出错了吗?还是有不同的想创建这个'临时'我正在写给 – codefail 2010-04-20 21:44:55

+0

也许你可以澄清你的问题一点。现在还不清楚你是否想知道如何检测图像的一部分是否模糊,或者如何创建一个新的图像,或者两者兼而有之,或者可能是其他的东西。我怀疑任何人都可以告诉你如何使用你的'Image'类的构造函数,却看不到它... – 2010-04-20 21:46:10

回答

2

你正在试图做的就地这个操作创建,但因为它是一个社区操作你会得到奇怪的结果。理想情况下,你需要单独的输入和输出图像,或者,如果你真的需要这样做,那么你需要一个小的临时缓冲区(和更复杂的代码),以防止在您的内核中使用修改过的像素。

0

这是您的算法有错误,你似乎怀疑 - 你模糊像素(X,Y),其平均像素以上,并直接向已经被模糊了它的左侧,并且要计算原始内容的平均值。所以你需要以某种方式将旧图像处理为新图像或类似的东西。