2019年4月2日 星期二

s1051541的作業二


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

開發環境:
Windows10 + Visual Studio 2015 + OpenCV 3.4.1

實作方式:
1.  Mat src = imread("img.jpg"); //讀入圖片
2.  cvtColor(srcImage, grayImage, CV_BGR2GRAY); //將圖片灰階化
3.  Sobel(grayImage, grad_x, CV_16S, 1, 0, 3, 1, 0, BORDER_DEFAULT);
//x方向梯度
4.  convertScaleAbs(grad_x, abs_grad_x);  //轉成CV_8U
5.  Sobel(grayImage, grad_y, CV_16S, 0, 1, 3, 1, 0, BORDER_DEFAULT);
//y方向梯度
6.  convertScaleAbs(grad_y, abs_grad_y);
7.  addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, edge);//合併梯度
8.  threshold(edge, dstImage, 80, 255, THRESH_BINARY | THRESH_OTSU); //對圖片邊緣結果進行二質化

執行結果:








左圖為原圖,右圖為素描畫面

沒有留言:

張貼留言