2014-12-03 10 views
5

Ciao Cari membri del forum!Come convertire Bitmap in Mat structur in EmguCV & Come rilevare due immagini shift

Sto lavorando a un progetto per rilevare la vista delle modifiche dalla videocamera di sicurezza. Voglio dire, quando qualcuno prova a spostare la telecamera (una specie di sabotaggio ...) devo notarlo. La mia idea è:

  • catturare le immagini dalla fotocamera ogni 10 secondi e confrontare queste due immagini (immagine vecchia e attuale).

Ci sono quasi 70 telecamere che devo controllare, quindi non posso utilizzare lo streaming live perché potrebbe occupare la mia connessione Internet. Io uso biblioteca Emgu CV per rendere questo compito, ma durante il mio lavoro ho attaccato con qualche problema .. Qui im ​​parte del mio codice ciò che ho preparato:

public class EmguCV 
{ 
    static public Model Test(string BaseImagePath, string ActualImagePath) 
    {   
     double noise = 0; 

     Mat curr64f = new Mat(); 
     Mat prev64f = new Mat(); 
     Mat hann = new Mat(); 

     Mat src1 = CvInvoke.Imread(BaseImagePath, 0); 
     Mat src2 = CvInvoke.Imread(ActualImagePath, 0); 
     Size size = new Size(50, 50); 

     src1.ConvertTo(prev64f, Emgu.CV.CvEnum.DepthType.Cv64F); 
     src2.ConvertTo(curr64f, Emgu.CV.CvEnum.DepthType.Cv64F); 

     CvInvoke.CreateHanningWindow(hann, src1.Size, Emgu.CV.CvEnum.DepthType.Cv64F); 

     MCvPoint2D64f shift = CvInvoke.PhaseCorrelate(curr64f, prev64f, hann, out noise); 

     double value = noise ; 

     double radius = Math.Sqrt(shift.X * shift.X + shift.Y * shift.Y); 

     Model Test = new Model() { osX = shift.X, osY = shift.Y, noise = value }; 

     return Test; 
    } 
} 

Pertanto, ho due domande:

  1. Come convertire la struttura Bitmap in Mat.

Al momento ho letto le mie immagini per confrontare dal disco in base al percorso del file. Ma vorrei inviare per confrontare la raccolta di bitmap senza salvare sul mio disco rigido.

  1. Conosci qualche altro modo per rilevare lo spostamento tra due immagini ?. Sarei davvero grato per qualsiasi altro suggerimento in questo settore.

saluti,

Mariusz

risposta

9

So che la sua molto tardi per rispondere a questo, ma oggi sono stato alla ricerca di questo problema in internet e ho trovato qualcosa di simile:

Bitmap bitmap; //This is your bitmap 
Image<Bgr, Byte> imageCV = new Image<Bgr, byte>(bitmap); //Image Class from Emgu.CV 
Mat mat = imageCV.Mat; //This is your Image converted to Mat 
+0

Benvenuto su StackOverflow, potresti voler ripulire la risposta modificandola e convertendo lo snippet di codice che hai incluso in un blocco di codice selezionando le linee e facendo clic sull'icona delle parentesi graffe {}. – silentsod

+0

Non lo sapevo, questa è la prima volta che pubblico. Grazie – Rey

Problemi correlati