MedianBlur与OpenCV有关

时间:2014-08-29 11:41:45

标签: opencv windows-phone-8 winrt-xaml

我使用OpenCV for Windows Phone 8.1(Windows运行时)在c ++中使用MS Open Tech https://github.com/MSOpenTech/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 Open Tech的代码?

感谢您的帮助!

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

创建cv :: Mat时,您正在反转高度和宽度。 Opencv Doc on Mat

根据文档,您应该创建:

Mat img(height, width, CV_8UC3);

但是,当你使用cv :: Size时,首先给出宽度。

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

这有点令人困惑,但肯定有原因。