撰寫一個程式,讀取一張 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);
四、實作:
原圖
找出邊緣之後
二值化之後的最後結果
沒有留言:
張貼留言