使用OpenCV sqrt的未处理内存异常

spu*_*rra 2 c++ opencv

这是我的以下代码:

void filter() {
    Mat kern = (Mat_<char>(3,3) << -1, 0, 1,
                                   -1, 0, 1,
                                   -1, 0, 1);

    Mat kern2 = (Mat_<char>(3,3) <<  1, 1, 1,
                                     0, 0, 0,
                                    -1, -1, -1);


    Mat I = imread("lena.bmp", CV_LOAD_IMAGE_COLOR);
    imshow("Lena1", I);
    Mat J,K;


    filter2D(I, J, I.depth(), kern);
    filter2D(I, K, I.depth(), kern2);

    imshow("Lena2", J);
    imshow("Lena3", K);

    pow(J,2,J);
    pow(K,2,K);
    Mat X = J + K;
    imshow("Test1", X);
    sqrt(X,X);
    imshow("Test2", X);

    waitKey(0);


}
Run Code Online (Sandbox Code Playgroud)

只是简单地尝试显示图像的渐变.但是,在sqrt(X,X)此处,会发生未处理的内存异常.怎么了?

BCo*_*nic 6

这可能是数据类型的问题.sqrt期待浮点图像(文档链接),但从你的代码,我认为它们是8位图像.

试图取代I.depth()通过CV_32F在您的来电filter2D.