1.Robert算子
cv::Mat gray;
cv::Mat dstRoX;
cv::Mat dstRoY;
cv::Mat dstRoM;
cv::Mat kernelRoX = (cv::Mat_<float>(2, 2) << 1, 0, 0, -1);
cv::Mat kernelRoY = (cv::Mat_<float>(2, 2) << 0, 1, -1, 0);
cv::cvtColor(src, gray, cv::COLOR_BGR2GRAY);
cv::filter2D(gray, dstRoX, -1, kernelRoX);
cv::filter2D(gray, dstRoY, -1, kernelRoY);
cv::imshow("gray", gray);
cv::imshow("Robert X方向算子", dstRoX);
cv::imshow("Robert Y方向算子", dstRoY);
dstRoX = cv::abs(dstRoX);
dstRoY = cv::abs(dstRoY);
cv::add(dstRoX, dstRoY, dstRoM);
cv::imshow("Robert算子梯度", dstRoM);
2.Sobel算子
cv::Mat dstSoX;
cv::Mat dstSoY;
cv::Mat dstSoM;
cv::Mat kernelSoX = (cv::Mat_<float>(3, 3) << -1, 0, 1, -2, 0, 2, -1, 0, 1);
cv::Mat kernelSoY = (cv::Mat_<float>(3, 3) << -1, -2, -1, 0, 0, 0, 1, 2, 1);
cv::filter2D(gray, dstSoX, -1, kernelSoX);
cv::filter2D(gray, dstSoY, -1, kernelSoY);
cv::imshow("sobel X方向算子", dstSoX);
cv::imshow("sobel Y方向算子", dstSoY);
dstSoX = cv::abs(dstSoX);
dstSoY = cv::abs(dstSoY);
cv::add(dstSoX, dstSoY, dstSoM);
cv::imshow("sobel算子梯度", dstSoM);
3.拉普拉斯算子
cv::Mat dstLap;
cv::Mat kernelLap = (cv::Mat_<float>(3, 3) << 0, -1, 0, -1, 4, -1, 0, -1, 0);
cv::filter2D(gray, dstLap, -1, kernelLap);
cv::imshow("拉普拉斯算子", dstLap);
4.结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/a5cbae244ea54a838285de74579c1a6d.png)