24. april 2010 - 20:01Der er
7 kommentarer og 1 løsning
Billed manipulering (Erstatning af grøn eller blå farve som i vejrudsigten)
Hejsa.
Jeg skal lave en windows applikation som kan tage et billed med et webcam.
I dette billed vil der være en del af billedet som er f.eks. blå eller grøn. Denne del vil jeg gerne kunne erstatte med et andet bitmap billed.
Så mit spørgsmål er:
1. Jeg har et Bitmap objekt. Med udgangspunkt i det, hvordan kan jeg så definere at den skal lede efter en bestemt farve indenfor et statisk angivet koordinatset. Altså f.eks. kun i 2 cm af billedet øverst til højre.
2. Hvordan kan man erstatte en specifik farve (f.eks. grøn eller blå) med et andet bitmap og så stå med et bitmap objekt til sidst som er det færdige billede. Altså et bitmap objekt hvor farven er blevet erstattet med det jeg nu gerne vil have derind i stedet for.
Med kunstig intelligens skaber HP’s nye OmniBook X 14 en unik og skræddersyet brugeroplevelse målrettet dem, der ønsker høj ydeevne og intelligente funktioner
Jeg er ikke ved at opfinde min egen måde at lave rugbrødsarbejde på :-)
Det skal bruges som en del af en applikation og skal foregå helt automatisk...
Der bliver taget et billed via et webcam. Programmet skal har så fået at vide at det skal starte med at lede efter en grøn farve på position x,y og slutte igen på x2, y2.
Hver gang den støder på et pixel som er grønt, skal den gå ned i et andet bitmap og indsætte pixel fra dette billede fundet på samme position.
Altså ligesom man gør i vejrudsigten med den blå skærm osv.
Jeg er bare ikke super hård til billedmanupulation i C# .Net, så derfor håber jeg der sidder en guru derude som kan give et eksempel på hvordan det kan gøres.
Hmmm, nå det blev en lidt anden løsning. Kan ikke umiddelbart finde noget omkring Chromakey i C#, selvom det nok havde været den bedste løsning.
Jeg nøjes og lægger bare et billed billed ind over mit webcam billed. Så må man bare ikke stikke sin hånd ind i den ramme hvor mit overlægningsbilled bliver lagt på. Så forsvinder ens hånd i hvert fald :-)
Løsningen blev det her indtil videre:
private void AddOverlayImage() { Pen myPen2 = new Pen(Color.Red, 1); Matrix myMatrix = new Matrix(); myMatrix.Rotate(Properties.Settings.Default.overlayimg_point_angle, MatrixOrder.Append);
Rectangle r = new Rectangle( Properties.Settings.Default.overlayimg_point_x, Properties.Settings.Default.overlayimg_point_y, Properties.Settings.Default.overlayimg_point_width, Properties.Settings.Default.overlayimg_point_height );
Bitmap bmp = new Bitmap(Properties.Settings.Default.overlay_image);
TextureBrush tb = new TextureBrush(bmp);
Graphics g = Graphics.FromImage(pictureBox1.Image); g.Transform = myMatrix; g.FillRectangle(tb, r);
pictureBox1.Update(); pictureBox1.Refresh(); }
Men stadig, hvis der er en som har et bedre forslag, så er jeg meget åben overfor forslag...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.