проблема при применении k-средств на cv2.значимость

#python #opencv #k-means

#python #opencv #k-средства

Вопрос:

Я работаю над проектом, который обнаруживает людей. Итак, я использую значимость в opencv и применяю кластеризацию k-средних на выходе значимости.

Проблема в том, что результат после применения кластеризации k-средних полностью черный

Вот код:

 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) amp; 0xff
    if k == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
  

Это ссылка на видео, на котором я тестировал алгоритм.
Может кто-нибудь указать на какую-либо ошибку или исправление?

Заранее спасибо.

Ответ №1:

Ключ преобразует формат в uint8 и масштабирует интенсивности на 255 после создания карты. Вы сделали это для первого типа карты значимости, но не для второго:

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