本文主要是介绍prewitt算子实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原理:
实现:
/*** @description: prewitt算子* @param src 输入图像* @param dst 输出图像*/
void prewitt(cv::Mat& src, cv::Mat& dst)
{cv::Mat getPrewitt_horizontal = (cv::Mat_<float>(3, 3) << -1, -1, -1, 0, 0, 0, 1, 1, 1);cv::Mat getPrewitt_vertical = (cv::Mat_<float>(3, 3) << -1, 0, 1, -1, 0, 1, -1, 0, 1); cv::Mat getPrewitt_diagonal1 = (cv::Mat_<float>(3, 3) << -1, -1, 0, -1, 0, 1, 0, 1, 1); cv::Mat getPrewitt_diagonal2 = (cv::Mat_<float>(3, 3) << 0, 1, 1, -1, 0, 1, -1, -1, 0); cv::flip(getPrewitt_horizontal, getPrewitt_horizontal, -1);cv::flip(getPrewitt_vertical, getPrewitt_vertical, -1);cv::flip(getPrewitt_diagonal1, getPrewitt_diagonal1, -1);cv::flip(getPrewitt_diagonal2, getPrewitt_diagonal2, -1);cv::Mat dst1, dst2, dst3, dst4;cv::filter2D(src, dst1, src.depth(), getPrewitt_horizontal); cv::filter2D(src, dst2, src.depth(), getPrewitt_vertical); cv::filter2D(src, dst3, src.depth(), getPrewitt_diagonal1); cv::filter2D(src, dst4, src.depth(), getPrewitt_diagonal2); cv::convertScaleAbs(dst1, dst1);cv::convertScaleAbs(dst2, dst2);cv::convertScaleAbs(dst3, dst3);cv::convertScaleAbs(dst4, dst4);dst = dst1 + dst2;
}
代码传送门:https://github.com/taifyang/OpenCV-algorithm
这篇关于prewitt算子实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!