2017-01-10 12 views
1

OpenCVの新機能です。私はVisual Studio 2013とopencv 3.1でC++を使用しています。私はCannyのエッジを計算したいと思います。私のコードはOpenCV 3.1 UMatの使用に関する警告とクラッシュ

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インスタンスを使用した場合、私の写真が見えます。

答えて

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; 
    } 

幸運

のようになります方法です
関連する問題