木易:_/ 2024-01-20 21:18 采纳率: 71.4%
浏览 1

python识别小区域黑斑,并把他们处理

遇到的问题

这个图片里面有很多黑色的小斑点,该怎么识别,去掉这些小斑点

img


消除斑点,尽量变成这个样子

img

采用过的方法

用这个去计算面积但是不能准确识别到这些黑色的小方块

# 寻找连通域
num_labels, labels, stats, centroids = cv.connectedComponentsWithStats(closing, connectivity=4)

需要识别处理的图片如下

img

  • 写回答

2条回答 默认 最新

  • 虫鸣@蝶舞 2024-01-20 23:19
    关注

    要判断到底是点还是波,可以通过canny算法提取波的轮廓,然后计算轮廓数组的长宽和面积,通过比较阀值,筛选出点,并把点设置成白色,请看通过我的思路,GPT编写的代码和效果

    import cv2
    import numpy as np
    from PIL import Image
    
    # 加载原始图像
    original_image_path = 'path_to_your_image.jpeg'
    original_image = cv2.imread(original_image_path)
    
    # 将图像转换为灰度图
    gray_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY)
    
    # 应用高斯模糊以帮助边缘检测
    blurred = cv2.GaussianBlur(gray_image, (5, 5), 0)
    
    # 执行边缘检测
    edges = cv2.Canny(blurred, 50, 150)
    
    # 在边缘图像中找到轮廓
    contours, _ = cv2.findContours(edges.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    
    # 处理每个轮廓
    cleaned_image_array = original_image.copy()
    for contour in contours:
        # 计算轮廓的包围矩形的长宽比
        x, y, w, h = cv2.boundingRect(contour)
        aspect_ratio = float(w) / h
        
        # 计算轮廓的面积
        area = cv2.contourArea(contour)
        
        # 设置长宽比和面积的阈值
        aspect_ratio_threshold = 20  # 根据观察调整此值
        area_threshold = 100  # 根据观察调整此值
        
        # 如果轮廓比较方形(噪点或大黑点),并且面积小(不是波纹)
        if aspect_ratio < aspect_ratio_threshold and area < area_threshold:
            # 用白色填充轮廓
            cv2.drawContours(cleaned_image_array, [contour], -1, (255, 255, 255), thickness=cv2.FILLED)
    
    # 将处理后的数组转换回图像
    cleaned_image = Image.fromarray(cv2.cvtColor(cleaned_image_array, cv2.COLOR_BGR2RGB))
    
    # 保存清理后的图像
    cleaned_image_path = 'path_to_your_cleaned_image.jpeg'
    cleaned_image.save(cleaned_image_path)
    
    # 可选:显示清理后的图像
    cleaned_image.show()
    
    

    GPT的模拟结果:

    img

    评论

报告相同问题?

问题事件

  • 创建了问题 1月20日

悬赏问题

  • ¥60 pb数据库修改或者求完整pb库存系统,需为pb自带数据库
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路