首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

OpenCV 學習筆記:線條濾鏡與素描效果實現

     編輯:關於C++

線條濾鏡

線條濾鏡的目標是提取圖像的主要輪廓線。處理流程包含四個步驟:灰度化、濾波、邊緣檢測、二值化。下面給出完整的 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);
}

素描效果展示:

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved