Difference between revisions of "Цифрови камери"

From Ilianko
Line 1: Line 1:
1. Снимка
+
1. Разглежда не R, G, B каналите
  разглежда не R, G, B каналите
+
 
 +
<code><pre>
 +
#include <opencv/highgui.h> //OpenCV GUI functions ̄include <stdio.h>
 +
#include <opencv/cv.h> //main OpenCV functions
 +
 
 +
int main()
 +
{
 +
 
 +
  IplImage *img, *img_r, *img_g, *img_b ; // image structer
 +
  int x,y, w = 512, h = 512; //image size
 +
 
 +
 
 +
  img_r = cvCreateImage( cvSize( w, h ), IPL_DEPTH_8U, 1 );
 +
  img_g = cvCreateImage( cvSize( w, h ), IPL_DEPTH_8U, 1 );
 +
  img_b = cvCreateImage( cvSize( w, h ), IPL_DEPTH_8U, 1 );
 +
 
 +
  img = cvLoadImage("lena_std.tif",1);
 +
 
 +
  for(x=0; x<img->width; x++)
 +
{
 +
for(y=0;y<img->height; y++)
 +
{
 +
(img_r->imageData + img_r->widthStep*y)[x]= (img->imageData + img->widthStep*y)[x*3+2];
 +
(img_g->imageData + img_g->widthStep*y)[x]= (img->imageData + img->widthStep*y)[x*3+1];
 +
(img_b->imageData + img_b->widthStep*y)[x]= (img->imageData + img->widthStep*y)[x*3];
 +
}
 +
}
 +
 
 +
 +
  cvNamedWindow("red", 1);
 +
  //display the image in the window
 +
  cvShowImage("red", img_r);
 +
 
 +
  cvNamedWindow("green", 1);
 +
  //display the image in the window
 +
  cvShowImage("green", img_g);
 +
 
 +
  cvNamedWindow("blue", 1);
 +
  //display the image in the window
 +
  cvShowImage("blue", img_b);
 +
 
 +
  cvNamedWindow("rgb", 1);
 +
  //display the image in the window
 +
  cvShowImage("rgb", img);
 +
 
 +
  //wait for key to close the window 
 +
  cvWaitKey(0);
 +
  cvDestroyWindow( "blue" ); //destroy the window
 +
  cvDestroyWindow( "red" );
 +
  cvDestroyWindow( "green" );
 +
  cvDestroyWindow( "rgb" ); 
 +
  cvReleaseImage( &img ); //release the memory for the image
 +
  cvReleaseImage( &img_r );
 +
  cvReleaseImage( &img_g );
 +
  cvReleaseImage( &img_b );
 +
 
 +
return 0;
 +
}
 +
 
 +
</pre></code>
 +
 
 +
 
 
2. Получаване на черно бяло изображение
 
2. Получаване на черно бяло изображение
 +
 +
<code><pre>
 +
include <opencv/highgui.h> //OpenCV GUI functions ̄include <stdio.h>
 +
#include <opencv/cv.h> //main OpenCV functions
 +
 +
 +
int main()
 +
{
 +
 
 +
  IplImage *img, *img_bw ; // image structure
 +
  int x,y, w = 512, h = 512; //image size
 +
 
 +
 
 +
  img_bw = cvCreateImage( cvSize( w, h ), IPL_DEPTH_8U, 1 );
 +
 
 +
  img = cvLoadImage("lena_std.tif",1);
 +
 
 +
  for(x=0; x<img->width; x++)
 +
{
 +
for(y=0;y<img->height; y++)
 +
{
 +
 +
(img_bw->imageData + img_bw->widthStep*y)[x] =   
 +
  ((uchar)((img->imageData + img->widthStep*y)[x*3+2])  >> 2 ) +  ((uchar)((img->imageData + img->widthStep*y)[x*3+2])  >> 4 ) +
 +
  ((uchar)((img->imageData + img->widthStep*y)[x*3+1])  >> 1 ) +  ((uchar)((img->imageData + img->widthStep*y)[x*3+1])  >> 4 ) +
 +
  ((uchar)((img->imageData + img->widthStep*y)[x*3])    >> 3 );
 +
                                                     
 +
}
 +
}
 +
 
 +
 +
  cvNamedWindow("rgb", 1);
 +
  //display the image in the window
 +
  cvShowImage("rgb", img);
 +
 
 +
  cvNamedWindow("bw", 1);
 +
  //display the image in the window
 +
  cvShowImage("bw", img_bw);
 +
 
 +
 +
  //wait for key to close the window 
 +
  cvWaitKey(0);
 +
  cvDestroyWindow( "bw" );
 +
  cvDestroyWindow( "rgb" ); 
 +
  cvReleaseImage( &img ); //release the memory for the image
 +
  cvReleaseImage( &img_bw );
 +
 
 +
return 0;
 +
}
 +
</pre></code>
  
 
3. Извличане на Bayern pattern  
 
3. Извличане на Bayern pattern  
 +
 +
<code><pre>
 +
#include <opencv/highgui.h> //OpenCV GUI functions ̄include <stdio.h>
 +
#include <opencv/cv.h> //main OpenCV functions
 +
 +
 +
int main()
 +
{
 +
 
 +
  IplImage *img, *img_bw ; // image structure
 +
  int x,y, w = 512, h = 512; //image size
 +
 
 +
 
 +
  img_bw = cvCreateImage( cvSize( w, h ), IPL_DEPTH_8U, 1 );
 +
 
 +
  img = cvLoadImage("lena_std.tif",1);
 +
 
 +
  int b = 1, r = 0, g = 1, br = 0;
 +
  for(x=0; x<img->width; x++)
 +
{
 +
b = ( b == 1 ) ? 0 : 1;
 +
r = ( r == 1) ?  0 : 1;
 +
for(y=0;y<img->height; y++)
 +
{
 +
          g = (g == 1) ? 0 : 1;
 +
          br = (br == 1) ? 0 : 1;
 +
        (img_bw->imageData + img_bw->widthStep*y)[x] =
 +
       
 +
          ((uchar)((img->imageData + img->widthStep*y)[x*3+2])*br*r)+
 +
          ((uchar)((img->imageData + img->widthStep*y)[x*3+1])*g ) +
 +
      ((uchar)((img->imageData + img->widthStep*y)[x*3])*br*b); 
 +
                                                     
 +
}
 +
}
 +
 
 +
 +
  cvNamedWindow("rgb", 1);
 +
  //display the image in the window
 +
  cvShowImage("rgb", img);
 +
 
 +
  cvNamedWindow("bw", 1);
 +
  //display the image in the window
 +
  cvShowImage("bw", img_bw);
 +
 
 +
  cvSaveImage("out2.bmp", img_bw, 0);
 +
 +
  //wait for key to close the window 
 +
  cvWaitKey(0);
 +
  cvDestroyWindow( "bw" );
 +
  cvDestroyWindow( "rgb" ); 
 +
  cvReleaseImage( &img ); //release the memory for the image
 +
  cvReleaseImage( &img_bw );
 +
 
 +
return 0;
 +
}
 +
</pre></code>
  
 
4. Преобразуване от bayer pattern в RGB
 
4. Преобразуване от bayer pattern в RGB
 +
 +
<code><pre>
 +
#include <opencv/highgui.h> //OpenCV GUI functions ̄include <stdio.h>
 +
#include <opencv/cv.h> //main OpenCV functions
 +
 +
 +
int main()
 +
{
 +
 
 +
  IplImage *img, *img_bw ; // image structure
 +
  int x,y, w = 512, h = 512; //image size
 +
 
 +
 
 +
  img = cvCreateImage( cvSize( w, h ), IPL_DEPTH_8U, 3 );
 +
 
 +
  img_bw = cvLoadImage("lennaBG.bmp",0);
 +
 
 +
  int b = 0, r = 1, g = 1, br = 0;
 +
  for(x=1; x<img->width-1; x++)
 +
{
 +
b = ( b == 1 ) ? 0 : 1;
 +
r = ( r == 1) ?  0 : 1;
 +
for(y=1;y<img->height-1; y++)
 +
{
 +
          g = (g == 1) ? 0 : 1;
 +
          br = (br == 1) ? 0 : 1;
 +
         
 +
          (img->imageData + img->widthStep*y)[x*3] = (img_bw->imageData + img_bw->widthStep*(y-1*g))[x-1*r];
 +
         
 +
          (img->imageData + img->widthStep*y)[x*3+1] = (img_bw->imageData + img_bw->widthStep*(y+1*br))[x]*b +
 +
                                                      (img_bw->imageData + img_bw->widthStep*(y+1*g))[x]*r;
 +
         
 +
         
 +
  (img->imageData + img->widthStep*y)[x*3+2]  =  (img_bw->imageData + img_bw->widthStep*(y+1*br))[x+1*b] ;
 +
         
 +
                                                     
 +
}
 +
}
 +
 
 +
 +
  cvNamedWindow("rgb", 1);
 +
  //display the image in the window
 +
  cvShowImage("rgb", img);
 +
 
 +
  cvNamedWindow("bw", 1);
 +
  //display the image in the window
 +
  cvShowImage("bw", img_bw);
 +
 
 +
  cvSaveImage("out1.bmp", img, 0);
 +
 +
  //wait for key to close the window 
 +
  cvWaitKey(0);
 +
  cvDestroyWindow( "bw" );
 +
  cvDestroyWindow( "rgb" ); 
 +
  cvReleaseImage( &img ); //release the memory for the image
 +
  cvReleaseImage( &img_bw );
 +
 
 +
return 0;
 +
}
 +
 +
</pre></code>
  
 
5. Оценка на разликите
 
5. Оценка на разликите

Revision as of 06:08, 26 May 2011

1. Разглежда не R, G, B каналите

#include <opencv/highgui.h> //OpenCV GUI functions ̄include <stdio.h>
#include <opencv/cv.h> //main OpenCV functions

int main()
{
  
  IplImage *img, *img_r, *img_g, *img_b ; // image structer
  int x,y, w = 512, h = 512; //image size
  
  
  img_r = cvCreateImage( cvSize( w, h ), IPL_DEPTH_8U, 1 );
  img_g = cvCreateImage( cvSize( w, h ), IPL_DEPTH_8U, 1 );
  img_b = cvCreateImage( cvSize( w, h ), IPL_DEPTH_8U, 1 );
  
  img = cvLoadImage("lena_std.tif",1);
  
  for(x=0; x<img->width; x++)
	{
		for(y=0;y<img->height; y++)
		{
			(img_r->imageData + img_r->widthStep*y)[x]= (img->imageData + img->widthStep*y)[x*3+2];
			(img_g->imageData + img_g->widthStep*y)[x]= (img->imageData + img->widthStep*y)[x*3+1];
			(img_b->imageData + img_b->widthStep*y)[x]= (img->imageData + img->widthStep*y)[x*3];
		}
	}
  
 
  cvNamedWindow("red", 1);
  //display the image in the window
  cvShowImage("red", img_r);
  
  cvNamedWindow("green", 1);
  //display the image in the window
  cvShowImage("green", img_g);
  
  cvNamedWindow("blue", 1);
  //display the image in the window
  cvShowImage("blue", img_b);
  
  cvNamedWindow("rgb", 1);
  //display the image in the window
  cvShowImage("rgb", img);
  
  //wait for key to close the window  
  cvWaitKey(0);
  cvDestroyWindow( "blue" ); //destroy the window
  cvDestroyWindow( "red" ); 
  cvDestroyWindow( "green" );
  cvDestroyWindow( "rgb" );  
  cvReleaseImage( &img ); //release the memory for the image
  cvReleaseImage( &img_r );
  cvReleaseImage( &img_g );
  cvReleaseImage( &img_b );
  
return 0;
}


2. Получаване на черно бяло изображение

include <opencv/highgui.h> //OpenCV GUI functions ̄include <stdio.h>
#include <opencv/cv.h> //main OpenCV functions


int main()
{
  
  IplImage *img, *img_bw ; // image structure
  int x,y, w = 512, h = 512; //image size
  
  
  img_bw = cvCreateImage( cvSize( w, h ), IPL_DEPTH_8U, 1 );
  
  img = cvLoadImage("lena_std.tif",1);
  
  for(x=0; x<img->width; x++)
	{
		for(y=0;y<img->height; y++)
		{

			(img_bw->imageData + img_bw->widthStep*y)[x] =    
			   ((uchar)((img->imageData + img->widthStep*y)[x*3+2])  >> 2 ) +  ((uchar)((img->imageData + img->widthStep*y)[x*3+2])  >> 4 ) +
			   ((uchar)((img->imageData + img->widthStep*y)[x*3+1])  >> 1 ) +  ((uchar)((img->imageData + img->widthStep*y)[x*3+1])  >> 4 ) +
			   ((uchar)((img->imageData + img->widthStep*y)[x*3])    >> 3 );
			                                                      
		}
	}
  
 
  cvNamedWindow("rgb", 1);
  //display the image in the window
  cvShowImage("rgb", img);
  
  cvNamedWindow("bw", 1);
  //display the image in the window
  cvShowImage("bw", img_bw);
  
 
  //wait for key to close the window  
  cvWaitKey(0);
  cvDestroyWindow( "bw" );
  cvDestroyWindow( "rgb" );  
  cvReleaseImage( &img ); //release the memory for the image
  cvReleaseImage( &img_bw );
  
return 0;
}

3. Извличане на Bayern pattern

#include <opencv/highgui.h> //OpenCV GUI functions ̄include <stdio.h>
#include <opencv/cv.h> //main OpenCV functions


int main()
{
  
  IplImage *img, *img_bw ; // image structure
  int x,y, w = 512, h = 512; //image size
  
  
  img_bw = cvCreateImage( cvSize( w, h ), IPL_DEPTH_8U, 1 );
  
  img = cvLoadImage("lena_std.tif",1);
  
  int b = 1, r = 0, g = 1, br = 0;
  for(x=0; x<img->width; x++)
	{
		b = ( b == 1 ) ? 0 : 1;
		r = ( r == 1) ?  0 : 1;
		for(y=0;y<img->height; y++)
		{
           g = (g == 1) ? 0 : 1;
           br = (br == 1) ? 0 : 1;
        (img_bw->imageData + img_bw->widthStep*y)[x] =
        
          ((uchar)((img->imageData + img->widthStep*y)[x*3+2])*br*r)+
          ((uchar)((img->imageData + img->widthStep*y)[x*3+1])*g ) +
	      ((uchar)((img->imageData + img->widthStep*y)[x*3])*br*b);  
			                                                      
		}
	}
  
 
  cvNamedWindow("rgb", 1);
  //display the image in the window
  cvShowImage("rgb", img);
  
  cvNamedWindow("bw", 1);
  //display the image in the window
  cvShowImage("bw", img_bw);
  
  cvSaveImage("out2.bmp", img_bw, 0);

  //wait for key to close the window  
  cvWaitKey(0);
  cvDestroyWindow( "bw" );
  cvDestroyWindow( "rgb" );  
  cvReleaseImage( &img ); //release the memory for the image
  cvReleaseImage( &img_bw );
  
return 0;
}

4. Преобразуване от bayer pattern в RGB

#include <opencv/highgui.h> //OpenCV GUI functions ̄include <stdio.h>
#include <opencv/cv.h> //main OpenCV functions


int main()
{
  
  IplImage *img, *img_bw ; // image structure
  int x,y, w = 512, h = 512; //image size
  
  
  img = cvCreateImage( cvSize( w, h ), IPL_DEPTH_8U, 3 );
  
  img_bw = cvLoadImage("lennaBG.bmp",0);
  
  int b = 0, r = 1, g = 1, br = 0;
  for(x=1; x<img->width-1; x++)
	{
		b = ( b == 1 ) ? 0 : 1;
		r = ( r == 1) ?  0 : 1;
		for(y=1;y<img->height-1; y++)
		{
          g = (g == 1) ? 0 : 1;
          br = (br == 1) ? 0 : 1;
          
          (img->imageData + img->widthStep*y)[x*3] = (img_bw->imageData + img_bw->widthStep*(y-1*g))[x-1*r];
          
          (img->imageData + img->widthStep*y)[x*3+1] = (img_bw->imageData + img_bw->widthStep*(y+1*br))[x]*b +
                                                       (img_bw->imageData + img_bw->widthStep*(y+1*g))[x]*r;
          
          
	   (img->imageData + img->widthStep*y)[x*3+2]  =  (img_bw->imageData + img_bw->widthStep*(y+1*br))[x+1*b] ;
          
	                                                      
		}
	}
  
 
  cvNamedWindow("rgb", 1);
  //display the image in the window
  cvShowImage("rgb", img);
  
  cvNamedWindow("bw", 1);
  //display the image in the window
  cvShowImage("bw", img_bw);
  
  cvSaveImage("out1.bmp", img, 0);

  //wait for key to close the window  
  cvWaitKey(0);
  cvDestroyWindow( "bw" );
  cvDestroyWindow( "rgb" );  
  cvReleaseImage( &img ); //release the memory for the image
  cvReleaseImage( &img_bw );
  
return 0;
}

5. Оценка на разликите