Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用OpenCV Python对灰度图像进行假设_Python_Opencv_Grayscale - Fatal编程技术网

使用OpenCV Python对灰度图像进行假设

使用OpenCV Python对灰度图像进行假设,python,opencv,grayscale,Python,Opencv,Grayscale,我试图使用opencv在python中对一个图像进行后期处理,经过一段时间的搜索,我发现了一条线索。但正如你们看到的rgb图像,我得到的是一个灰度图像,不管怎样,我做了,得到了奇怪的输出。我调整了代码中的一些地方,得到了更奇怪的输出。有人能解释一下发生了什么事吗 编辑: 我的代码 import numpy as np import cv2 img = cv2.imread('Lenna.png') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) Z

我试图使用opencv在python中对一个图像进行后期处理,经过一段时间的搜索,我发现了一条线索。但正如你们看到的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()
输入图像:

输出图像:


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

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图像

有人能解释一下发生了什么事吗

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

你能做什么? 简单地说,将输入重塑为灰度值的一维向量

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

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

在我看来,你想要的是某种图像量化。我认为你可以通过使用垃圾箱来实现这一点。这也有助于了解什么是奇怪的输出和变化,也许你可以发布一张图片或其他东西,以及一些你用来解释发生了什么的代码。是的。量化是一个恰当的词p您缺少重塑部分
Z=img。在您的情况下,重塑(-1,3))
是1而不是3(1个通道而不是3)。如果你不这样做,那么你是在传递奇怪的向量(我认为是行),你是对的,伙计。。成功了……)