如何将灰度图像中的轮廓值设置为该轮廓的最大值?
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 - 图像二值化处理 腐蚀膨胀 边缘检测 轮廓识别