Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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
Python 3.x 基于颜色的图像分割_Python 3.x_Opencv_Image Processing_Opencv3.0 - Fatal编程技术网

Python 3.x 基于颜色的图像分割

Python 3.x 基于颜色的图像分割,python-3.x,opencv,image-processing,opencv3.0,Python 3.x,Opencv,Image Processing,Opencv3.0,我已经获得了一个图像后,应用k-均值聚类=3。现在我想在k均值后获得的颜色的基础上获得3个单独的图像。 例如,考虑附加图像。现在我需要 一幅只包含蓝色正方形的图像。 一个字母是v,另一个只有背景 使用OpenCV和python是否有任何可能的方法来实现这一点。您可以通过计算图像的直方图来解决此问题。 下图显示了图像的峰值 由此,可以设置颜色的阈值。代码和结果: import cv2 import numpy as np from matplotlib import pyplot as plt

我已经获得了一个图像后,应用k-均值聚类=3。现在我想在k均值后获得的颜色的基础上获得3个单独的图像。 例如,考虑附加图像。现在我需要 一幅只包含蓝色正方形的图像。 一个字母是v,另一个只有背景
使用OpenCV和python是否有任何可能的方法来实现这一点。

您可以通过计算图像的直方图来解决此问题。 下图显示了图像的峰值

由此,可以设置颜色的阈值。代码和结果:

import cv2 
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread("inputs/hist.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
hist = cv2.calcHist([gray],[0],None,[256],[0,256])
colors = np.where(hist>5000)
img_number = 0
for color in colors[0]:
    print(color)
    split_image = img.copy()
    split_image[np.where(gray != color)] = 0
    cv2.imwrite(str(img_number)+".jpg",split_image)
    img_number+=1
plt.hist(gray.ravel(),256,[0,256])
plt.savefig('plt')
plt.show()
结果:


最通用、最简单的方法是为每个区域使用三种独特的灰色。(虽然我可以在上面的图像中找到三个以上的灰度级,可能是由于imgur压缩导致的变化。不过,在一天结束时,k-means应该给出三个BGR值)


所以再做两个克隆。在一个例子中,让一切不是白色,黑色和保存。在另一种情况下,制作所有非蓝色、黑色等的图像。@MarkSetchell这只是一个示例图像,我不知道我将接收的颜色好的,随机选取像素,直到有3个不同的像素,或者从左上角开始,反复浏览,直到你有了3种不同的颜色。你能再贴几张图片进行测试吗?你不能使用标签图片而不是量化颜色图片吗?这将避免“反向工程”颜色。当两种或两种以上的颜色具有相同的亮度时,这将失败。@Yvesdao我们是否可以使用HSV颜色空间来解决此问题?没有必要切换到HSV。保留RGB。(事实上,使用标签图像会更好。)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
unique = np.unique(gray)
c1, c2, c3 = unique[0], unique[1], unique[2]

mask1 = np.zeros_like(gray)
mask1[gray == c1] = 255

mask2 = np.zeros_like(gray)
mask2[gray == c2] = 255

mask3 = np.zeros_like(gray)
mask3[mask3 == c3] = 255