m0_59844904 2023-04-06 21:21 采纳率: 33.3%
浏览 84
已结题

使用opencv python语言写出这个代码 不要用机器学习的函数

用python语言写出:基于遥感图像的农田分类和面积计算。!不要用机器学习的方法!用纹理特征提取或颜色特征提取的方法进行农田分类。

img


最好用这个图片运行一下

  • 写回答

7条回答 默认 最新

  • Leodong. 2023-04-06 21:27
    关注

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    以下是一个基于纹理特征提取和颜色特征提取的农田分类和面积计算的Python示例代码。这里使用了OpenCV库来处理图像和提取特征。代码中使用的图像是一个真实的遥感图像,包含了多个不同的农田类型。

    import cv2
    import numpy as np
    
    # 读取图像
    img = cv2.imread('agricultural_field.jpg')
    
    # 定义颜色范围
    green_lower = np.array([50, 100, 0], dtype="uint8")
    green_upper = np.array([90, 255, 255], dtype="uint8")
    
    brown_lower = np.array([10, 60, 20], dtype="uint8")
    brown_upper = np.array([20, 255, 255], dtype="uint8")
    
    # 颜色特征提取
    green_mask = cv2.inRange(cv2.cvtColor(img, cv2.COLOR_BGR2HSV), green_lower, green_upper)
    brown_mask = cv2.inRange(cv2.cvtColor(img, cv2.COLOR_BGR2HSV), brown_lower, brown_upper)
    
    # 纹理特征提取
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    blur = cv2.GaussianBlur(gray, (5, 5), 0)
    canny = cv2.Canny(blur, 30, 150)
    
    # 联合特征提取
    combined_mask = cv2.bitwise_or(green_mask, brown_mask)
    combined_mask = cv2.bitwise_and(combined_mask, canny)
    
    # 进行形态学操作,去除噪声
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
    combined_mask = cv2.dilate(combined_mask, kernel)
    combined_mask = cv2.erode(combined_mask, kernel)
    
    # 查找轮廓
    contours, _ = cv2.findContours(combined_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    
    # 计算不同类型农田的面积
    green_area = 0
    brown_area = 0
    for contour in contours:
        area = cv2.contourArea(contour)
        if area < 100:
            continue
        x, y, w, h = cv2.boundingRect(contour)
        if w < 10 or h < 10:
            continue
        if cv2.mean(green_mask[y:y+h, x:x+w])[0] > 0:
            green_area += area
        elif cv2.mean(brown_mask[y:y+h, x:x+w])[0] > 0:
            brown_area += area
    
    # 输出结果
    print("Green area:", green_area)
    print("Brown area:", brown_area)
    

    代码中首先读取了一个名为“agricultural_field.jpg”的遥感图像。然后,定义了两个颜色范围来提取绿色和棕色的农田。使用OpenCV的inRange函数,将图像转换为HSV颜色空间,并在颜色范围内生成掩码。然后,将绿色和棕色掩码合并,并使用Canny边缘检测算法提取图像的纹理特征。然后,将两个特征结合起来,并使用形态学操作去除噪声。最后,使用OpenCV的findContours函数查找图像中的轮廓,并计算不同类型的农田面积。最终,程序输出了绿色和棕色农田的面积。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月13日
  • 修改了问题 4月6日
  • 创建了问题 4月6日