【发布时间】:2017-04-04 09:20:07
【问题描述】:
我想将一个轮廓的所有值与该轮廓的最高值相等,为了更好地理解,请看下面的图片:
这里查看最大值为200的第一个轮廓,经过处理后,所有区域都变为最大值,第二个轮廓的最大值为255,处理后所有区域这个轮廓的轮廓变得相同了。
有没有简单有效的方法来做到这一点?
【问题讨论】:
我想将一个轮廓的所有值与该轮廓的最高值相等,为了更好地理解,请看下面的图片:
这里查看最大值为200的第一个轮廓,经过处理后,所有区域都变为最大值,第二个轮廓的最大值为255,处理后所有区域这个轮廓的轮廓变得相同了。
有没有简单有效的方法来做到这一点?
【问题讨论】:
是的,并且在带有阈值的 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,