2010-04-20 103 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),其平均像素以上,並直接向已經被模糊了它的左側,並且要計算原始內容的平均值。所以你需要以某種方式將舊圖像處理爲新圖像或類似的東西。