opencv Robert 算子 Sobel算子 Laplance 算子 自定义线性滤波和 图像添加边缘

在这里插入图片描述在这里插入图片描述


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


}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值