OpenCV 3.1警告和使用UMat时崩溃

问题描述 投票:1回答:1

我是使用OpenCV的新手。我在visual studio 2013和opencv 3.1中使用c ++。我想计算Canny边缘,这是我的代码:

UMat getImage()
{
    return imread("...\\myPic.jpg").getUMat(ACCESS_FAST);
}

int _tmain(int argc, _TCHAR* argv[])
{
    UMat u;
    u = getImage();

    cv::Canny(u, u, 100, 50);

    namedWindow("Display window", WINDOW_AUTOSIZE);// Create a window for display.
    imshow("Display window", u);

    getchar();

    return 0;
}

我看不到结果或任何图像。而不是它,我看到这个窗口:enter image description here

怎么了?我注意到在使用Mat实例的情况下我可以看到我的照片。

c++ opencv mat
1个回答
0
投票

您编写的代码有2个问题。

1)如果没有轻微的停顿,imshow将无法正确显示您的图像。您需要在imshow之后添加函数waitkey(0)以使图像正确显示结果。

2)处理UMat变量时,最好接收和返回参考矩阵,而不是返回整个矩阵,因为UMat内存并不总是在CPU空间中。以下是您的代码的外观

void getImage(cv::OutputArray u)
{
    cv::imread("...\\myPic.jpg").getUMat(cv::ACCESS_FAST).copyTo(u);
}

  int main(int argc, const char** argv)
    {
        cv::UMat u;
        getImage(u);

        cv::Canny(u, u, 100, 50);

        cv::namedWindow("Display window", cv::WINDOW_AUTOSIZE);// Create a window for display.
        cv::imshow("Display window", u);
        cv::waitKey(0);
        getchar();

        return 0;
    }

祝好运

© www.soinside.com 2019 - 2024. All rights reserved.