Java 如何将灰色图像中轮廓的值设置为该轮廓的最高值?

Java 如何将灰色图像中轮廓的值设置为该轮廓的最高值?,java,c++,opencv,Java,C++,Opencv,我想将轮廓的所有值与此轮廓的最高值相等,为了更好地理解,请查看以下图像: 这里看一下最大值为200的第一个轮廓,经过处理后,所有区域都与最大值相同,第二个轮廓的最大值为255,经过处理后,该轮廓的所有区域都相同 有什么简单有效的方法可以做到这一点吗?是的,而且在opencv中使用阈值处理非常简单。下面是Python中的代码 import numpy as np import cv2 img=cv2.imread(your_input_image_path) max_value=np.max

我想将轮廓的所有值与此轮廓的最高值相等,为了更好地理解,请查看以下图像:

这里看一下最大值为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
或类似工具,首先获取对象的边界,然后使用遮罩仅对图像的该部分设置阈值。

但是,如果您的图像始终是黑色背景上的一个对象,则此代码可以工作。

是的,而且在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,最大值是(这里)2D数组。我只是想找一些东西来获得最大值,但如何在Java中实现它不是Java编码器,它似乎比Python要复杂一些,但在这个问题中,这家伙是用双for循环来实现的,我已经找到了如何获得最大值,minMaxLoc()Opencv内置函数。谢谢!你能告诉我什么是
np.max()
我在Java中使用OpenCV,最大值是(这里)2D数组。我只是想找一些东西来获得最大值,但如何在Java中实现它不是Java编码器,它似乎比Python要复杂一些,但在这个问题中,这家伙是用双for循环来实现的,我已经找到了如何获取最大值的minMaxLoc()Opencv内置函数。