手绘PS云毕业照片走红网络,身为预备役程序员的我却把好好的青春回忆变成了暗黑系恐怖片

边缘检测是制作暗黑校园童话的强有力武器

手残果然会崩坏了美好的毕业照片,把好好的青春回忆变成了暗黑系恐怖片,原图坚决不能放,没有对比都已经把审美扭曲成这样了。
在这里插入图片描述我们这里仅仅是在感官层面上来认识下sobel,laplacian,canny三种算子的区别。canny边缘线条的粗细程度是一样的。laplacian (二阶微分算子) 对于边缘的检测很敏感,可以检测到更对的信息,但是相应的,噪声也会很多。sobel (梯度算子)不太符合人眼睛的视觉原理。

#include "opencv2/opencv.hpp"
#include "opencv2/core.hpp"
#include "opencv2/highgui.hpp"
#include <iostream>
 
using namespace std;
using namespace cv;
 

int main(int argc, char** argv)
{
    String imageName("/home/warmtree/下载/M1_ComputerVision/Lab2/sky.jpeg");
    //char* imageName = argv[1]; //图像路径
    Mat image;
    Mat lena; //新建图像对象
    image = imread(imageName, 1); //1 表示BGR格式读取
    lena = imread(imageName, 1);
    // if (argc != 2 || !image.data)  //image.empty()
    // {printf(" No image data \n ");return -1;}
    Mat gray_image;
    Mat sep_image;
    Mat gaussian_image;
    cvtColor(image, gray_image, COLOR_BGR2GRAY); //颜色通道转换 BGR-->Gray
    // separable filter
    Mat kernel = cv::getGaussianKernel(7, 1.5, CV_32F);
    sepFilter2D(image, sep_image, -1, kernel, kernel);
    GaussianBlur(image, gaussian_image, cv::Size(7, 7), 1.5);
    Mat sobel,laplacian,canny;
    Sobel(lena,sobel,CV_8U,1,1);
    Laplacian(lena,laplacian,CV_8U,1,1);
    Canny(lena,canny, 100, 200);
    namedWindow("sobel", WINDOW_AUTOSIZE); //新建窗口
    namedWindow("laplacian", WINDOW_AUTOSIZE);
    namedWindow("canny", WINDOW_AUTOSIZE);
    imshow("sobel", sobel);
    imshow("laplacian", laplacian);
    imshow("canny", canny);

    Mat image2,image_blur,image_r;
    image2 = 255 - gray_image; //对图片的取反操作

    cv::GaussianBlur(image2, image_blur,cv::Size2i(25,25),0,0); //用高斯模糊进行处理

    image_blur = 255 - image_blur; //高斯模糊处理后的图像在进行取反

    cv::divide(image2, image_blur,image_r,256); //利用divide除法实现图片亮化

    //cv::imwrite("filename", image_r); //保存图片

    cv::imshow("image",image_r);

    waitKey();
    /*
    //imwrite("../../images/Gray_Image.jpg", gray_image); //保存图像
    namedWindow("Original image", WINDOW_AUTOSIZE); //新建窗口
    namedWindow("Gray image", WINDOW_AUTOSIZE);
    namedWindow("Result", WINDOW_AUTOSIZE);
    imshow("Original image", image); //与窗口对应来显示图片
    imshow("Gray image", gray_image);
    imshow("sep_Result",sep_image);
    imshow("gaussian_image",gaussian_image);
    waitKey(0); //0ms 表示无限等待 知道用户按下按键
    */
    destroyAllWindows(); //关闭所有窗口
    return 0;
}

很明显,有个地方很不对劲,学士服明明是黑色的,但是,我这里面也太亮了。进行了色彩取反操作,进行边缘的叠加,效果突然好了那么一丢丢(有点像黑白漫画了。云层那块黑线有点奇怪。
在这里插入图片描述 双边滤波器的原理与参数效果一个点的滤波后的像素值由他邻域内的像素点决定,通过距离和相似度来确定加权系数。

image_r = canny+image2;
cv::imshow("image",225-image_r);

残留问题:如何把黑白漫画转化成彩色漫画?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肥鼠路易

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值