s1081050 作業2

線條自畫像 (二值化與邊緣偵測 Image Thresholding and Edge Detection)

目錄

作業說明

撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE)
(a)利用 Sobel Operators 偵測並輸出邊緣成分圖
(b)設計一個類似素描線條的自畫像圖案。

開發環境

$ uname -srvmio
Linux 5.19.0-35-generic #36~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Feb 17 15:17:25 UTC 2 x86_64 x86_64 GNU/Linux
$ gcc --version
gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0
$ pkg-config --modversion opencv4
4.5.4

程式碼說明

宣告與初始化變數

// include opencv 與 stdio library #include "opencv2/highgui.hpp" #include "opencv2/imgcodecs.hpp" #include "opencv2/photo.hpp" #include "opencv2/opencv.hpp" #include <stdio.h> // 定義GUI視窗名稱、圖片路徑 #define WINDOW_TITLE(...) "Image " __VA_ARGS__ #define FILE_PATH "./fig.jpg" // 使用 cv namespace using namespace cv;

函式宣告

int main() { // load image from path Mat src, blur, gray, output_a, output_b1, output_b2; src = imread(FILE_PATH); if (src.empty()) { printf("%s", "Error loading image \n"); return -1; } // convert color image to gray image cvtColor(src, gray, COLOR_RGB2GRAY); // use blur to reduce noise GaussianBlur(gray, blur, Size(7, 7), 0); // sobel edge detect Sobel(blur, output_a, -1, 1, 1, 5); bitwise_not(output_a, output_a); // cv2 built-in sketch pencil effect pencilSketch(src, output_b1, output_b2, 100, 0.07, 0.07); // create window and show output namedWindow(WINDOW_TITLE("Edge Detect"), WINDOW_AUTOSIZE); imshow(WINDOW_TITLE("Edge Detect"), output_a); namedWindow(WINDOW_TITLE("Sketch"), WINDOW_AUTOSIZE); imshow(WINDOW_TITLE("Sketch"), output_b1); // color Sketch // namedWindow(WINDOW_TITLE("Sketch2"), WINDOW_AUTOSIZE); // imshow(WINDOW_TITLE("Sketch2"), output_b2); waitKey(0); return 0; }

程式展示

編譯

cmake . make


執行

./HW2

邊緣偵測

素描效果

參考資料

cv::pencilSketch
cv:Sobel

tags: CS362 s1081050 HW2

留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1091537 Homework #1