dh2046 2024-06-03 23:53 采纳率: 76.9%
浏览 12
已结题

使用opencv cv2.drawContours的时候,画出来的区域,与实际区域不重合

使用opencv cv2.drawContours的时候,画出来的区域,与实际区域不重合

img

img

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-03 23:53
    关注

    引自免费微信小程序:皆我百晓生

    在您提供的代码中,看起来您正在尝试找出图像中的轮廓并绘制出来。然而,由于您没有提供具体的图像数据和完整的上下文,我将基于您给出的代码片段提供一些可能的解决方案。

    首先,确保您已经正确地读取了图像,并进行了预处理,比如灰度化、二值化等操作,以便于找到有效的轮廓。这里是一个基本的示例,展示了如何进行这些步骤以及绘制轮廓:

    import cv2
    import numpy as np
    
    # 读取图像
    img = cv2.imread("your_image.jpg") # 替换为您的图像文件路径
    
    # 将图像转换为灰度
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    # 对图像应用阈值(这里使用Otsu's二值化方法)
    _, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
    
    # 寻找轮廓
    contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    
    # 创建一个与原图像大小相同的空白图像用于绘制轮廓
    img2 = np.zeros_like(img, dtype=np.uint8)
    img2[:] = img[:]
    
    # 绘制轮廓
    cv2.drawContours(img2, contours, -1, (0, 255, 0), 1)
    
    # 显示结果
    cv2.imshow('Contours', img2)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    如果您已经完成了上述步骤并且仍然遇到问题,那么可能是由于图像的预处理不够理想导致的。您可以尝试调整二值化的参数,例如使用不同的阈值方法(如固定阈值)或者对图像进行滤波(如 median blur 或 Gaussian blur)来减少噪声。此外,检查轮廓检测是否正确,可以使用 cv2.drawContours 来显示原始轮廓,看看它们是否符合预期。

    如果您能提供图像样本和具体的问题描述(例如,轮廓与实际区域的偏差情况),我可以为您提供更精确的帮助。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月21日
  • 已采纳回答 6月13日
  • 创建了问题 6月3日

悬赏问题

  • ¥15 采用ansys进行机翼在特定路径下的打孔过程中的受力分析
  • ¥15 单片机adb主机连接手机,usb调试密钥无法保存
  • ¥15 已知X和Y有以下关系,求X和Y的关系式
  • ¥15 net core 同时编辑怎么防止数据多保存了
  • ¥15 matlab做ba模型让其在ba和er规则下生长
  • ¥50 有偿!centos curl port设置问题
  • ¥15 请问Quartus的Verilog代码怎么写?
  • ¥100 Mac 版foxmail 收邮件问题
  • ¥15 QWebEngineView
  • ¥15 如何使用shufflenet进行手写数字识别