場景需求
今天心血來潮,想給女朋友做個素描圖,就寫個代碼簡單實作一下,
功能實作思路
首先加載下原圖,進行高斯模糊得到blur圖,將原圖和blur圖進行除法運算,可以提取出紋理圖,紋理涂本身已經有些素描的感覺了;為了加深效果,需要進一步處理,取紋理圖的反轉圖再與blur進行一次除法運算,可以得到反色系的紋理圖,然后反轉即可實作加深效果,上述效果的實作其實很大程度上依賴于divide除法運算中對0點的處理,即除以0或者0被除都為0 ,所以有時需要進行反轉,如果不反轉,最后得到的可能就是純色圖了,
C++測驗代碼
#include <iostream>
#include <opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
// 加載原始圖片
Mat src = imread("cheng.jpg", 0);
// 高斯模糊
Mat blur;
GaussianBlur(src, blur, Size(15, 15), 0, 0);
// 提取紋理
Mat veins;
divide(src, blur, veins, 255);
// 加深處理
Mat deepenb, deepena;
divide(255-veins, blur, deepenb, 255);
deepena = 255 - deepenb;
imwrite("result.png", deepena);
imshow("gray", src);
imshow("blur", blur);
imshow("veins", veins);
imshow("result", deepena);
waitKey(0);
system("pause");
return 0;
}
測驗效果
上述測驗效果受高斯濾波的尺寸影響,素描圖的實作方案有很多,我只是提供了一種比較簡單的思路,我女朋友吐槽說有素描感覺,但是真正的素描圖更有感覺,所以手繪還是牛逼,
如果文章幫助到你了,可以點個贊讓我知道,我會很快樂~加油!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/292629.html
標籤:AI
