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

C++ 使用OpenCV sqrt的未处理内存异常,c++,opencv,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,

以下是我的代码:

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


}
void过滤器(){

Mat kern=(Mat_u3,3)这可能是数据类型的问题。
sqrt
expect浮点图像(),但从您的代码来看,我认为它们是8位图像


在调用
filter2D

时,尝试将
I.depth()
替换为
cv32f
sqrt
的声明是什么?我得到:OpenCV错误:在CV::pow中断言失败(depth==cv32f | depth==cv64f),@berak与我的确切代码?imshow(“Test2”,X*(1.0/255));//只要调整范围我认为浮点图像的范围是[0,1],8位图像的范围是[0255]。因此,要么使用
convertTo
将最终图像转换回8位,要么除以255得到[0,1]范围。@berak击败了我;)哦,好的,谢谢你们两位。为初学者的问题感到抱歉。为我回到教程:)没有理由感到抱歉,你们显然在进步;)