将上述代码整合为一个可执行的代码展示给我
时间: 2024-09-25 12:02:37 浏览: 27
VB+ACCESS学校田径运动会管理系统设计(源代码+系统+答辩).rar
将上述代码整理成一个完整的可执行文件,你可以创建一个新的C++项目,然后在源代码文件(例如`main.cpp`)中加入以下内容:
```cpp
#include <iostream>
#include <opencv2/opencv.hpp>
int main(int argc, char** argv)
{
if (argc != 2) {
std::cerr << "Usage: edge_detection <image_path>" << std::endl;
return -1;
}
const std::string inputPath = argv[1];
cv::Mat srcImage = cv::imread(inputPath, cv::IMREAD_GRAYSCALE);
if (srcImage.empty()) {
std::cerr << "Error loading image: " << inputPath << std::endl;
return -1;
}
// 图像预处理
cv::Mat blurredImage;
cv::GaussianBlur(srcImage, blurredImage, cv::Size(5, 5), 0);
// 边缘检测算子
cv::Mat RobertsEdgeMap;
cv::cvtColor(blurredImage, RobertsEdgeMap, cv::COLOR_GRAY2GRAY);
cv::filter2D(RobertsEdgeMap, RobertsEdgeMap, -1, cv::Mat_<float>(2,2) << 1, -1);
cv::Mat SobelX, SobelY;
cv::Sobel(blurredImage, SobelX, CV_8U, 1, 0, 3, 1, 0);
cv::Sobel(blurredImage, SobelY, CV_8U, 0, 1, 3, 1, 0);
cv::Mat sobelCombined = cv::abs(SobelX + SobelY);
cv::Mat LaplaceMap;
cv::Laplacian(blurredImage, LaplaceMap, CV_8U, 3);
cv::Mat cannyOutput;
cv::Canny(blurredImage, cannyOutput, 50, 150);
// 显示原始和处理后的图像
cv::namedWindow("Original Image", cv::WINDOW_NORMAL);
cv::imshow("Original Image", srcImage);
cv::namedWindow("Roberts Edge Map", cv::WINDOW_NORMAL);
cv::imshow("Roberts Edge Map", RobertsEdgeMap);
cv::namedWindow("Sobel Combined", cv::WINDOW_NORMAL);
cv::imshow("Sobel Combined", sobelCombined);
cv::namedWindow("Laplace Edge Map", cv::WINDOW_NORMAL);
cv::imshow("Laplace Edge Map", LaplaceMap);
cv::namedWindow("Canny Edge Detection", cv::WINDOW_NORMAL);
cv::imshow("Canny Edge Detection", cannyOutput);
cv::waitKey(0);
cv::destroyAllWindows();
return 0;
}
```
要编译这个程序,确保已经安装了OpenCV库并且环境变量配置正确。在命令行中输入以下命令(假设你的项目名为`edge_detection`),并在命令后跟你要检测的图像路径:
```
g++ -o edge_detection main.cpp `pkg-config --cflags --libs opencv4`
./edge_detection <image_path>
```
记得替换 `<image_path>` 为你想检测的图片文件名。这将会显示原始图像和各算子处理后的结果。
阅读全文