openCV学习记录:滤镜:线条&素描

线条滤镜

线条滤镜主要是勾勒出图片的主要轮廓线,处理过程是:

  • 图像灰度化
  • 滤波
  • 边缘检测
  • 二值化

    完整代码如下:

#include<opencv2/opencv.hpp>
#include<iostream>

using namespace cv;
using namespace std;

void xianTiaoFilter(Mat &srcImage);

int main(){
    Mat srcImage = imread("lena.jpg");

    if(!srcImage.data || srcImage.empty()){
        cout<<"读入图片错误!"<<endl;
        return -1;
    }

    imshow("原图",srcImage);

    xianTiaoFilter(srcImage);

    waitKey(0);
    return 0;
}

void xianTiaoFilter(Mat &srcImage){
    Mat grayImage;

    //灰度化
    cvtColor(srcImage, grayImage, CV_BGR2GRAY);

    // 设置中值滤波器参数
    medianBlur(grayImage, grayImage, 7);

    // Laplacian边缘检测
    Mat edge; 
    Laplacian(grayImage, edge, CV_8U, 5);

    imshow("La",edge);

    // 对边缘检测结果进行二值化
    Mat dstImage; 
    threshold(edge, dstImage, 127, 255, THRESH_BINARY_INV);// >127 ? 0:255,用黑色描绘轮廓

    imshow("线条滤镜",dstImage);
}

效果如下:

这里写图片描述




素描滤镜

参考文章:小熊不去实验室

完整代码如下:

#include<opencv2/opencv.hpp>
#include<iostream>

using namespace cv;
using namespace std;

void suMiaoFilter(Mat &srcImage);

int main(){
    Mat srcImage = imread("lena.jpg");

    if(!srcImage.data || srcImage.empty()){
        cout<<"读入图片错误!"<<endl;
        return -1;
    }

    imshow("原图",srcImage);

    suMiaoFilter(srcImage);

    waitKey(0);
    return 0;
}

void suMiaoFilter(Mat &srcImage){
    Mat gray0,gray1;
    //去色,灰度化
    cvtColor(srcImage,gray0,CV_BGR2GRAY);

    //反色
    addWeighted(gray0,-1,NULL,0,255,gray1);

    //高斯模糊,高斯核的Size与最后的效果有关  
    GaussianBlur(gray1,gray1,Size(11,11),0); 

    //融合:颜色减淡  
    Mat dstImage(gray1.size(),CV_8UC1); 

    for (int y=0; y<srcImage.rows; y++)  
    {  
        uchar* P0  = gray0.ptr<uchar>(y);  
        uchar* P1  = gray1.ptr<uchar>(y);  
        uchar* P  = dstImage.ptr<uchar>(y);  
        for (int x=0; x<srcImage.cols; x++)  
        {  
            int tmp0=P0[x];  
            int tmp1=P1[x];  
            P[x] =(uchar) min((tmp0+(tmp0*tmp1)/(256-tmp1)),255);  
        }  
    }  

    imshow("素描滤镜",dstImage);
}

效果如下:
这里写图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值