我使用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的代码?
感谢您的帮助!
答案 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);
这有点令人困惑,但肯定有原因。