【问题标题】:How to set the value of a contours in a gray image to the highest value of this contours?如何将灰度图像中的轮廓值设置为该轮廓的最大值?
【发布时间】:2017-04-04 09:20:07
【问题描述】:

我想将一个轮廓的所有值与该轮廓的最高值相等,为了更好地理解,请看下面的图片:

这里查看最大值为200的第一个轮廓,经过处理后,所有区域都变为最大值,第二个轮廓的最大值为255,处理后所有区域这个轮廓的轮廓变得相同了。

有没有简单有效的方法来做到这一点?

【问题讨论】:

    标签: java c++ opencv


    【解决方案1】:

    是的,并且在带有阈值的 opencv 中相当容易。这是Python中的代码

    import numpy as np
    import cv2
    
    img=cv2.imread(your_input_image_path)
    
    max_value=np.max(img)
    
    #thresholding : setting every pixel in img above 1 to max_value
    _,th=cv2.threshold(img,1,max_value,cv2.THRESH_BINARY)
    
    cv2.imwrite(your_output_image_path,th)
    

    输入:

    输出:

    这适用于您的图像,如果您的背景并不总是黑色,则需要稍微调整,或者您想在特定对象上执行此操作(我对您使用轮廓这个词有点退缩) .如果是这样,那么您需要使用findContours 或类似方法首先获取对象的边界,然后使用蒙版仅对图像的该部分进行阈值处理。
    但是,如果您的图像始终是黑色背景上的一个对象,则此代码有效。

    【讨论】:

    • 谢谢!你能告诉我什么是np.max()我在Java中使用OpenCV,
    • (此处)二维数组的最大值。
    • 我只是在寻找一些东西来获得最大值,但是如何在 Java 中做到这一点
    • 不是 Java 编码器,它似乎比 Python 复杂一些,但例如在这个问题stackoverflow.com/questions/29452190/… 中,这家伙用双 for 循环来完成
    • 我找到了如何获取最大值,minMaxLoc() Opencv 内置函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2016-04-27
    相关资源
    最近更新 更多