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击败了我;)哦,好的,谢谢你们两位。为初学者的问题感到抱歉。为我回到教程:)没有理由感到抱歉,你们显然在进步;)