線條濾鏡的目標是提取圖像的主要輪廓線。處理流程包含四個步驟:灰度化、濾波、邊緣檢測、二值化。下面給出完整的 C++ 實現代碼:
#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;
}
xianTiaoFilter(srcImage);
return 0;
}
void xianTiaoFilter(Mat &srcImage) {
Mat gray, edge, dst;
cvtColor(srcImage, gray, COLOR_BGR2GRAY);
blur(gray, edge, Size(3,3));
Canny(edge, edge, 50, 150);
threshold(edge, dst, 127, 255, THRESH_BINARY);
imshow("線條濾鏡", dst);
waitKey(0);
}
執行後的效果圖如下:

素描濾鏡通過雙邊濾波與邊緣檢測結合,產生類似鉛筆素描的視覺效果。完整代碼如下:
#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;
}
suMiaoFilter(srcImage);
return 0;
}
void suMiaoFilter(Mat &srcImage) {
Mat gray, gray0, gray1, dst;
cvtColor(srcImage, gray, COLOR_BGR2GRAY);
bilateralFilter(gray, gray0, 9, 80, 80);
Canny(gray0, gray1, 50, 150);
threshold(gray1, dst, 127, 255, THRESH_BINARY_INV);
imshow("素描濾鏡", dst);
waitKey(0);
}
素描效果展示:
