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

时间:2014-02-28 14:39:18

标签: 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);


}

只是尝试显示图像的渐变。但是,在sqrt(X,X)处,会发生未处理的内存异常。有什么问题?

1 个答案:

答案 0 :(得分:6)

这可能是数据类型的问题。 sqrt期望浮点图像(documentation link),但是从您的代码中,我认为它们是8位图像。

尝试在I.depth()的通话中将CV_32F替换为filter2D