以下是我的以下代码:
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)
处,会发生未处理的内存异常。有什么问题?
答案 0 :(得分:6)
这可能是数据类型的问题。 sqrt
期望浮点图像(documentation link),但是从您的代码中,我认为它们是8位图像。
尝试在I.depth()
的通话中将CV_32F
替换为filter2D
。