【问题标题】:Posturizing grayscale image using OpenCV-Python使用 OpenCV-Python 对灰度图像进行预处理
【发布时间】:2017-09-25 16:51:00
【问题描述】:

我试图在 python 中使用 opencv 对图像进行分色处理,经过一段时间的搜索后,我在openCV documentations 中找到了线索。但是正如您所看到的,它用于 rgb 图像,而我得到的是灰度图像,无论如何我都这样做了,并且得到了奇怪的输出。我调整了代码中的一些地方,得到了更奇怪的输出。有人可以解释一下发生了什么吗?

编辑:

我的代码

import numpy as np
import cv2

img = cv2.imread('Lenna.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Z = np.float32(gray)

criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
K = 8
ret,label,center=cv2.kmeans(Z,K,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)

center = np.uint8(center)
res = center[label.flatten()]

cv2.imshow('res',res)
cv2.waitKey(0)
cv2.destroyAllWindows()

输入图片:

输出图像:

【问题讨论】:

  • 据我所知,您想要的是某种图像量化。例如,我认为您可以通过使用垃圾箱来实现这一点。它还有助于了解奇怪的输出和变化,也许您可​​以发布图像或其他内容,以及您正在使用的一些代码来解释正在发生的事情。
  • 是的。量化是正确的词。 :P
  • 您缺少重塑部分 Z = img.reshape((-1,3)) 在您的情况下是 1 而不是 3(1 通道而不是 3)。如果你不这样做,那么你正在传递奇怪的向量(我认为是行)
  • 你是对的,伙计..它成功了.. :)

标签: python opencv grayscale


【解决方案1】:

谁能解释一下这是怎么回事?

Kmeans 输入是向量的向量,或者在很多情况下,是像素向量或 2D/3D 点的向量。在您的代码中,您传递的是一个图像,它是一行中的值的向量。这就是为什么你会得到这个奇怪的值。

你能做什么?

简单,将输入重塑为灰度值的一维向量。

Z = img.reshape((-1,1))

这样,它将尝试使用每个灰度值作为输入来对它们进行聚类(分组),然后相应地标记每个值。

【讨论】:

    【解决方案2】:

    如果您进一步查看示例,您可以找到这样的解决方案:

    import numpy as np
    import cv2
    
    img = cv2.imread('Lenna.png')
    
    Z = img.reshape((-1,3))
    
    # convert to np.float32
    Z = np.float32(Z)
    
    # define criteria, number of clusters(K) and apply kmeans()
    criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
    K = 8
    
    
    ret,label,center=cv2.kmeans(Z,K,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)
    
    # Now convert back into uint8, and make original image
    center = np.uint8(center)
    res = center[label.flatten()]
    res2 = res.reshape((img.shape))
    
    cv2.imshow('res2',res2)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    请注意此处的重塑以考虑 RGB 图像。

    【讨论】:

      猜你喜欢
      • 2015-05-10
      • 2015-06-28
      • 2021-02-13
      • 2013-04-15
      • 2013-05-15
      • 1970-01-01
      • 2021-04-21
      • 2020-10-22
      • 1970-01-01
      相关资源
      最近更新 更多