2019年5月8日 星期三

s1051423的作業2

一、題目: 
撰寫一個程式,讀取一張 256 色灰階圖像或 RGB 全彩圖像(.bmp 或.jpg 圖像格式都可) ,利用 Sobel Operators 偵測圖像邊緣,並以邊緣偵測為基礎(如彩色圖像針可先將圖片 由 RGB 轉換至 HIS 或 YUV, YCbCr 等色彩空間,只需對亮度 Channel I 或 Y 處理,再 轉回 RGB 即可),設計一個類似素描線條自畫像程式。

二、環境: 
MS Window 10
Visual Studio 2017
OpenCV 3.4.0


三、說明: 
1. 載入影像
    Mat src = imread("pic.jpg", CV_LOAD_IMAGE_GRAYSCALE);

2. 去除雜訊使圖片平滑

    GaussianBlur(src, src, Size(3, 3), 0, 0);

3. 找邊緣(X軸和Y軸各進行一次)

    void Sobel(InputArray src, OutputArray dst, int ddepth, int dx, int dy, int ksize=3, double scale=1, double delta=0, int borderType=BORDER_DEFAULT)

4. 計算輸入圖各像素,並將結果轉成8位元圖(X軸和Y軸各進行一次)
    void convertScaleAbs(InputArray src, OutputArray dst, double alpha=1, double beta=0)

5. 將X軸和Y軸分析邊緣的影像結合

    addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dst1);

6. 將影像二值化(以128做為閥值)

    threshold(dst1, dst2, 128, 255, THRESH_BINARY_INV | THRESH_OTSU);

7.輸出影像
   imshow("origin", src);
   imshow("Sobel_1", dst1);
   imshow("Sobel_2", dst2);

四、實作: 

                                      原圖

                                   找出邊緣之後                                                                             

                         二值化之後的最後結果

沒有留言:

張貼留言