opencv學習筆記15-提取輪廓-Sobel算子

只用來記錄學習筆記

Sobel算子作用:提取邊緣像素
原理:做一階導數:
在這裏插入圖片描述

在這裏插入圖片描述

	Mat xgrad, ygrad;

	Sobel(gray_src, xgrad, CV_16S, 1, 0, 3); 
	//gray_src:灰度圖片
	//xgrad:
	//CV_16S:深度,不能用-1,只能用深度比CV_8U大的:-1/CV_16S/CV_32F/CV_64F。
	//1:x方向幾階導數
	//0:y方向幾階導數
	//3:SOBEL算子kernel大小,必須是1、3、5、7
	Sobel(gray_src, ygrad, CV_16S, 0, 1, 3);
	convertScaleAbs(xgrad, xgrad); //增強
	convertScaleAbs(ygrad, ygrad); //增強
	imshow("xgrad", xgrad);
	imshow("ygrad", ygrad);
	addWeighted(xgrad, 0.5, ygrad, 0.5, 0, dst3); //合併圖像
	imshow("final image", dst3);

效果圖:
在這裏插入圖片描述
自己寫合併方法:

	Mat xygrad = Mat(xgrad.size(), xgrad.type());
	int width = xgrad.cols;
	int height = ygrad.rows;
	for (int row = 0; row < height; row++) {
		for (int col = 0; col < width; col++) {
			int xg = xgrad.at<uchar>(row, col);
			int yg = ygrad.at<uchar>(row, col);
			int xy = xg + yg;
			xygrad.at<uchar>(row, col) = saturate_cast<uchar>(xy);
		}
	}
	imshow("final2", xygrad);

效果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章