c++基于梯度算子(或Robert算子、或Prewitt算子锐化、或Sobel算子锐化)生成梯度图像,基于梯度图像利用边缘跟踪算法跟踪图像里的物体边缘,生成边缘图像。
时间: 2023-12-29 14:05:40 浏览: 78
新建文件夹_算子_prewitt算子锐化_
以下是一个 C++ 程序,使用 Sobel 算子进行图像锐化并生成边缘图像:
```c++
#include <iostream>
#include <opencv2/opencv.hpp>
int main(int argc, char *argv[]) {
if (argc != 3) {
std::cerr << "Usage: " << argv[0] << " input_image_path output_edge_image_path" << std::endl;
return 1;
}
// 读取输入图像
std::string inputImagePath = argv[1];
cv::Mat inputImage = cv::imread(inputImagePath, cv::IMREAD_GRAYSCALE);
// Sobel 算子锐化图像
cv::Mat sobelX, sobelY;
cv::Sobel(inputImage, sobelX, CV_32F, 1, 0);
cv::Sobel(inputImage, sobelY, CV_32F, 0, 1);
cv::Mat gradient;
cv::magnitude(sobelX, sobelY, gradient);
// 边缘跟踪
cv::Mat edgeImage;
cv::threshold(gradient, edgeImage, 128, 255, cv::THRESH_BINARY);
// 保存边缘图像
std::string outputImagePath = argv[2];
cv::imwrite(outputImagePath, edgeImage);
return 0;
}
```
程序使用 OpenCV 库读取输入图像,并使用 Sobel 算子计算梯度。然后通过计算 Sobel 梯度的幅值得到梯度图像。最后,使用二值化操作将梯度图像转换为边缘图像,并将其保存到输出文件中。
阅读全文