come immagine di processo con opencv in python?

Voglio usare il bordo di algoritmi di rilevamento da libreria opencv.
Ecco un pezzo di codice python:

from opencv.cv import *
from opencv.highgui import *

img = cvLoadImage ('xxx.jpg')
cvNamedWindow ('img')
cvShowImage ('img', img)
cvWaitKey ()

canny = cvCreateImage (cvSize (img.width, img.height), 8, 3)
cvCanny (img, canny, 50, 200)

harris = cvCreateImage (cvSize (img.width, img.height), 8, 3)
cvCornerHarris (img, harris, 5, 5, 0.1)

Di carico e mostrando l’immagine funziona bene, ma canny e harris trasformazioni esito negativo.
cvCanny esito:

RuntimeError:  openCV Error:
    Status=Unsupported format or combination of formats
    function name=cvCanny
    error message=
    file_name=cv/cvcanny.cpp
    line=72

e cvCornerHarris non riesce con questo errore:

RuntimeError:  openCV Error:
    Status=Assertion failed
    function name=cvCornerHarris
    error message=src.size() == dst.size() && dst.type() == CV_32FC1
    file_name=cv/cvcorner.cpp
    line=370

Da messaggi di questo posso dedurre che l’immagine caricata è formato non valido. Ma io non riesco a capire come convertire.

Qui ci sono i valori di alcuni img campi:

img.type = 1111638032
img.nChannels = 3
img.depth = 8
+1 per fonte di lavoro.
quale versione delle API stai usando? il codice sembra essere coerente con le vecchie API e può essere fonte di confusione per i nuovi utenti: si consiglia di utilizzare “importa cv” e simili. Sarò felice di tradurre il codice, se lo si desidera
è python-opencv_2.0.0-3ubuntu2. L’ho installato dai repository di Ubuntu 10.04.

OriginaleL’autore max taldykin | 2011-02-15

3 Replies
  1. 6

    Ecco il codice fisso. Vedere i commenti inline. Lunga storia breve: i tipi di dati sono sbagliati. Leggi il API.

    try:
        from opencv.cv import *
        from opencv.highgui import *
    except:
        #
        # Different OpenCV installs name their packages differently.
        #
        from cv import *
    
    if __name__ == '__main__':
        import sys
        #
        # 1 = Force the image to be loaded as RGB
        #
        img = LoadImage (sys.argv[1], 1)
        NamedWindow ('img')
        ShowImage ('img', img)
        WaitKey ()
    
        #
        # Canny and Harris expect grayscale  (8-bit) input.
        # Convert the image to grayscale.  This is a two-step process:
        #   1.  Convert to 3-channel YCbCr image
        #   2.  Throw away the chroma (Cb, Cr) and keep the luma (Y)
        #
        yuv = CreateImage(GetSize(img), 8, 3)
        gray = CreateImage(GetSize(img), 8, 1)
        CvtColor(img, yuv, CV_BGR2YCrCb)
        Split(yuv, gray, None, None, None)
    
        canny = CreateImage(GetSize(img), 8, 1)
        Canny(gray, canny, 50, 200)
        NamedWindow ('canny')
        ShowImage ('canny', canny)
        WaitKey()
    
        #
        # The Harris output must be 32-bit float.
        #
        harris = CreateImage (GetSize(img), IPL_DEPTH_32F, 1)
        CornerHarris(gray, harris, 5, 5, 0.1)
    Grazie! Ho letto le API, ma non è chiaro quale sia il formato immagine ogni trasformazione si aspetta.
    btw, sia per le importazioni (openhighgu e cv) non funziona sul mio ubuntu 10.04
    Se non hanno lavoro, come hai fatto a eseguire il codice? Che in genere significa che il wrapper Python per OpenCV non sono installati.
    essi funzionano come in origine, ovvero tutto ciò che viene importato con cv prefisso
    Oh, mi dispiace. Questo significa che c’è un errore di battitura nel mio codice, devo aver cambiato quando stavo cercando di farlo funzionare sul mio sistema. Vado a modificarlo ora.

    OriginaleL’autore mpenkov

  2. 8

    Per altre persone interessate allo stesso tipo di problema vi consiglio di verificare http://simplecv.org

    Qui è un po ‘ di codice che ho scritto che fa la linea di rilevamento di un’immagine acquisita da una webcam. Sarà anche in grado di visualizzare l’immagine su http. come immagine di processo con opencv in python?

    import SimpleCV
    import time
    
    c = SimpleCV.Camera(1)
    js = SimpleCV.JpegStreamer() 
    
    while(1):
      img = c.getImage()
      img = img.smooth()
      lines = img.findLines(threshold=25,minlinelength=20,maxlinegap=20)
      [line.draw(color=(255,0,0)) for line in lines]
      #find the avg length of the lines
      sum = 0
      for line in lines:
          sum = line.length() + sum
      if sum:
          print sum / len(lines)
      else:
          print "No lines found!"
      img.save(js.framebuffer)
      time.sleep(0.1)

    Controllare il progetto che ho fatto questo per http://labs.radiantmachines.com/beard/ rileva quanto a lungo il tuo collo, la barba è 🙂

    +1, grazie, bello
    Questo è assolutamente terribile. +++1 da me!

    OriginaleL’autore Gourneau

  3. 2

    È possibile convertire un’immagine in scala di grigi in un unico passaggio, invece di due:

    gray = cv.CreateMat(img.height, img.width, cv.CV_8UC1)
    cv.CvtColor(img, gray, cv.CV_BGR2GRAY)

    OriginaleL’autore Abhinav Sood

Lascia un commento