prewitt算子实现

该博客介绍了如何使用OpenCV库实现Prewitt算子进行图像边缘检测。通过定义水平、垂直和两个对角线方向的卷积核,对图像应用滤波2D操作,并将结果相加以获取最终边缘图像。代码详细展示了预处理过程和转换步骤。

原理:
在这里插入图片描述
实现:

/**
 * @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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

给算法爸爸上香

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值