題目:
撰寫一個程式,讀取一張
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); //對圖片邊緣結果進行二質化
執行結果:
左圖為原圖,右圖為素描畫面
沒有留言:
張貼留言