2014-08-29 76 views
0

我正在使用OpenCV for Windows Phone 8.1(Windows運行時)在C++與MS開放技術https://github.com/MSOpenTech/opencv發佈。MedianBlur問題與OpenCV

該版本基於OpenCV 3,並且medianBlur函數似乎存在問題。 當我使用一個正方形的圖像,將medianBlur完美的作品,但是當我使用一個矩形圖像時,medianBlur產生奇怪的效果......

下面的結果:http://fff.azurewebsites.net/opencv.png

我使用的代碼:

// get the pixels from the WriteableBitmap 
byte* pPixels = GetPointerToPixelData(m_bitmap->PixelBuffer); 
int height = m_bitmap->PixelHeight; 
int width = m_bitmap->PixelWidth; 

// create a matrix the size and type of the image 
cv::Mat mat(width, height, CV_8UC4); 
memcpy(mat.data, pPixels, 4 * height*width); 

cv::Mat timg(mat); 
cv::medianBlur(mat, timg, 9); 
cv::Mat gray0(timg.size(), CV_8U), gray; 

// copy processed image back to the WriteableBitmap 
memcpy(pPixels, timg.data, 4 * height*width); 

// update the WriteableBitmap 
m_bitmap->Invalidate(); 

我沒有找到問題所在......它是我的代碼中的錯誤?或OpenCV 3的錯誤?從MS開放技術的代碼?

感謝您的幫助!

回答

0

創建cv :: Mat時反轉高度和寬度。 Opencv Doc on Mat

根據文檔,你應該建立這樣的:

Mat img(height, width, CV_8UC3); 

然而,當您使用CV ::大小,你先放棄寬度。

Mat img(Size(width,height),CV_8UC3); 

這有點令人困惑,但肯定有一個原因。

+0

哈哈,非常感謝你!它的作用就像一個魅力:D 感謝MS你的樣品與這個litle錯誤;) – Nico 2014-08-29 12:27:35

+0

@biquette的原因可能是,在數學中存在兩個約定:矩陣公約索引:行第一。圖像約定:首先x軸。這可能與爲什麼存在兩種方式來訪問矩陣元素(用矩陣約定中的「.at」之一(行第一)和一個用於圖像約定「Point」)是相同的原因。 – Micka 2014-08-29 14:06:50

+0

@Micka,謝謝你的解釋。 – biquette 2014-08-29 14:35:09

0

試試這個代碼,更改一些代碼。

// get the pixels from the WriteableBitmap 
    byte* pPixels = GetPointerToPixelData(m_bitmap->PixelBuffer); 
    int height = m_bitmap->PixelHeight; 
    int width = m_bitmap->PixelWidth; 

    // create a matrix the size and type of the image 
    cv::Mat mat(cv::Size(width, height), CV_8UC3); 
    memcpy(mat.data, pPixels, sizeof(byte) * height*width); 

    cv::Mat timg(mat.size(),CV_8UC3); 
    cv::medianBlur(mat, timg, 9); 
    // cv::Mat gray0(timg.size(), CV_8U), gray; 

    // copy processed image back to the WriteableBitmap 
    memcpy(pPixels, timg.data,sizeof(byte) * height*width); 

    // update the WriteableBitmap 
    m_bitmap->Invalidate(); 
+0

嗨,謝謝你的回覆,但它不工作......頂部有奇怪的影響... – Nico 2014-08-29 12:20:46

+0

現在嘗試上面的代碼。一些改變完成了。 – balajichinna 2014-08-29 12:30:24