Python 在cv2.2显著性上应用k-均值时的问题

Python 在cv2.2显著性上应用k-均值时的问题,python,opencv,k-means,Python,Opencv,K Means,我正在做一个探测人的项目。所以我在opencv中使用显著性,并对显著性的输出应用k均值聚类 问题是应用k-means聚类后的输出是完全黑色的 代码如下: import cv2 import time import numpy as np cap=cv2.VideoCapture("video.avi") while(cap.isOpened()): #time.sleep(0.05) _,frame=cap.read() image=frame

我正在做一个探测人的项目。所以我在opencv中使用显著性,并对显著性的输出应用k均值聚类

问题是应用k-means聚类后的输出是完全黑色的

代码如下:

import cv2
import time
import numpy as np

cap=cv2.VideoCapture("video.avi")

while(cap.isOpened()):
    #time.sleep(0.05)
    _,frame=cap.read()

    image=frame 

    saliency = cv2.saliency.StaticSaliencySpectralResidual_create()
    (success, saliencyMap) = saliency.computeSaliency(image)
    saliencyMap = (saliencyMap * 255).astype("uint8")

    #cv2.imshow("Image", image)
    #cv2.imshow("Output", saliencyMap)

    saliency = cv2.saliency.StaticSaliencyFineGrained_create()
    (success, saliencyMap) = saliency.computeSaliency(image)
    threshMap = cv2.threshold(saliencyMap.astype("uint8"), 0, 255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]

    # show the images
    #cv2.imshow("Image", image)
    cv2.imshow("saliency", saliencyMap)
    #cv2.imshow("Thresh", threshMap)
    
    
    ##############implementing k-means clustering#######################
    kouts=saliencyMap
    clusters=7
    z=kouts.reshape((-1,3))

    z=np.float32(z)

    criteria= (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER,10,1.0)

    ret,label,center=cv2.kmeans(z,clusters,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)

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


    cv2.imshow('clustered image',kouts)

    
    k = cv2.waitKey(1) & 0xff
    if k == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
这是我测试算法的视频的第一部分。 有人能指出任何错误或更正吗


提前感谢。

关键是将格式转换为
uint8
,并在创建地图后将强度缩放255。您对第一种类型的显著性贴图执行了此操作,但对第二种类型的显著性贴图未执行此操作:

saliency = cv2.saliency.StaticSaliencyFineGrained_create()
(success, saliencyMap) = saliency.computeSaliency(image)
### ADDED
saliencyMap = (saliencyMap * 255).astype("uint8")