如何将灰度图像中的轮廓值设置为该轮廓的最大值?

Posted

技术标签:

【中文标题】如何将灰度图像中的轮廓值设置为该轮廓的最大值?【英文标题】: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,处理后所有区域这个轮廓的轮廓变得相同了。

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

【问题讨论】:

【参考方案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 复杂一些,但例如在这个问题***.com/questions/29452190/… 中,这家伙用双 for 循环来完成 我找到了如何获取最大值,minMaxLoc() Opencv 内置函数。

以上是关于如何将灰度图像中的轮廓值设置为该轮廓的最大值?的主要内容,如果未能解决你的问题,请参考以下文章

关于用matlab处理图像的问题,如何将下进行边缘提取,得到比较清晰的轮廓,最好是能寻找到偏心孔的坐标

图像灰度化、二值化理解

OpenCV - 图像二值化处理 腐蚀膨胀 边缘检测 轮廓识别

opencv 利用cv.matchShapes()函数实现图像识别技术

图像识别入门5 二值化处理

直方图均衡化会造成灰度级的合并伪轮廓