opencv解析系列 - 基于DOM提取大面积植被(如森林)

时间:2024-03-14 12:09:28
#include <iostream> #include "opencv2/imgproc.hpp" #include "opencv2/highgui.hpp" #include <opencv2/opencv.hpp> using namespace cv; #pragma comment(lib,"opencv_world490d.lib") int main(int, char**) { // 读取图像 cv::Mat originalImage = cv::imread("D:\\OpenCV\\1.jpg"); cv::Mat image = cv::imread("D:\\OpenCV\\1.jpg", cv::IMREAD_GRAYSCALE); // 应用阈值处理 cv::Mat binaryImage; cv::threshold(image, binaryImage, 128, 255, cv::THRESH_BINARY); // 可以使用滤波、边缘检测等方法进行图像处理和增强 // 可以使用特征提取、目标检测等方法进行建筑物识别 //创建结构元素 cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(10, 10)); //膨胀 cv::Mat dilateImage; cv::dilate(binaryImage, dilateImage, kernel, cv::Point(0, 0), 3); //腐蚀 cv::Mat erodedImage; cv::erode(dilateImage, erodedImage, kernel); // 颜色反转 cv::bitwise_not(erodedImage, erodedImage); // 寻找轮廓 std::vector<std::vector<cv::Point>> contours; cv::findContours(erodedImage, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE); // 绘制轮廓 cv::Mat contourImage = cv::Mat::zeros(image.size(), CV_8UC3); cv::drawContours(contourImage, contours, -1, cv::Scalar(0, 255, 0),2); //将轮廓叠加到原始图片上 Mat resultImage; addWeighted(originalImage, 0.7, contourImage, 0.3, 0, resultImage); // 创建窗口并显示图片 cv::imshow("Original Image", originalImage); //cv::imshow("Tree", contourImage); cv::imshow("Tree", resultImage); // 等待按键退出 cv::waitKey(0); // 销毁窗口 cv::destroyAllWindows(); }