int main(int argc, char *argv[])
{
src=imread("./1/3.jpg");
if(!src.data)
return -1;
//自定义线性滤波
Mat temp;
cvtColor(src,temp,CV_BGR2GRAY);
//Robert 算子 Sobel算子 Laplance 算子
//Robert x方向
Mat kernel_x=(Mat_<float>(2,2) << 1,0,0,-1);
filter2D(temp,dst,-1,kernel_x,Point(-1,-1),0.0);
imshow("Robert_x",dst);
//Rpbert Y方向
Mat kernel_y=(Mat_<float>(2,2) << 0,1,-1,0);
filter2D(temp,dst,-1,kernel_y,Point(-1,-1),0.0);
imshow("Robert_y",dst);
//Sobel x方向
Mat kernel_x=(Mat_<int>(3,3) << -1,0,1,-2,0,2,-1,0,1);
filter2D(temp,dst,-1,kernel_x,Point(-1,-1),0.0);
imshow("Sobel_x",dst);
//Sobel Y方向
Mat kernel_y=(Mat_<int>(3,3) << -1,-2,-1,0,0,0,1,2,1);
filter2D(temp,dst,-1,kernel_y,Point(-1,-1),0.0);
imshow("Sobel_y",dst);
//Laplance算子
Mat kernel_y=(Mat_<int>(3,3) << 0,-1,0,-1,4,-1,0,-1,0);
filter2D(temp,dst,-1,kernel_y,Point(-1,-1),0.0);
imshow("Laplance",dst);
//自定义卷积模糊
int c=0;
int index=0,ksize=3;
while (true) {
c=waitKey(500);
if((char)c==27)
{
break;
}
ksize = 4 + (index % 5)*2 +1;
Mat kernel=Mat::ones(Size(ksize,ksize),CV_32F) /(float)(ksize*ksize);
filter2D(src,dst,-1,kernel,Point(-1,-1));
index++;
imshow("dst",dst);
}
//给图像添加边缘
// copyMakeBorder(src,dst,10,10,10,10,BORDER_CONSTANT,Scalar(0,255,0));
copyMakeBorder(src,dst,100,100,100,100,BORDER_REPLICATE);
imshow("dst",dst);
GaussianBlur(src,dst,Size(3,3),0,0);
cvtColor(dst,dst,CV_BGR2GRAY);
Mat xgray,ygray;
Sobel(dst,xgray,CV_16S,1,0,3);
Sobel(dst,ygray,CV_16S,1,0,3);
convertScaleAbs(xgray,xgray);
convertScaleAbs(ygray,ygray);
imshow("xgray",xgray);
imshow("ygray",ygray);
Mat result;
addWeighted(xgray,0.5,ygray,0.5,0,result);
imshow("resolt",result);
}
opencv Robert 算子 Sobel算子 Laplance 算子 自定义线性滤波和 图像添加边缘
最新推荐文章于 2024-01-19 16:34:54 发布