繁体   English   中英

锐化图像中每个 object 的边框像素

[英]sharpen out border pixels of each object in image

我有一个带有一些随机组件的图像......每个组件的边框都有一些模糊的像素,即......看截图带有模糊像素的边界

所以使用 OpenCv 和 python,我希望这张图片非常清晰......即边缘没有模糊像素......如下图所示

在此处输入图像描述

这是完整的图像供您参考...... 在此处输入图像描述

为了对错误有一定的容忍度,这种行为可以通过使用 k-means 算法来实现。 该算法可用于构建具有相似颜色的像素簇。 OpenCV k-means实现提供了许多参数来调整以获得所需的结果。 您可以使用以下代码片段开始:

import cv2
import numpy as np

img = cv2.imread("/path/to/img.png")
Z = img.reshape((-1, 3))
Z = np.float32(Z)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
K = 2
ret, label, center = cv2.kmeans(Z, K, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)

center = np.uint8(center)
res = center[label.flatten()]
res2 = res.reshape((img.shape))

cv2.imwrite("./output.png", res2)

上面的代码将为示例图像生成以下结果:

在此处输入图像描述

但是这段代码可能不适用于较大的图像(即使在通过 K=5 之后),这是因为我们依靠 K-means 通过随机采样来挑选种子。 我们可以选择传入种子 colors 以查找代码中黄色、浅绿色、深绿色、棕色和蓝色的 BGR 值。 将这些 BGR 值作为种子提供后,您可以获得更好的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM