ahesgo

Ex: OpenCV Görüntü İşleme

Jun 11th, 2012
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.13 KB | None | 0 0
  1. //opencv için gerekli kütüphaneleri ekliyoruz
  2.  
  3. #include <opencv\cv.h>
  4. #include <opencv\highgui.h>
  5.  
  6. //linker ile gerekli bağlantıları yapıyoruz...
  7. #pragma comment(lib,"opencv_core220d.lib")
  8. #pragma comment(lib,"opencv_highgui220d.lib")
  9. #pragma comment(lib,"opencv_video220d.lib")
  10. #pragma comment(lib,"opencv_ml220d.lib")
  11. #pragma comment(lib,"opencv_legacy220d.lib")
  12. #pragma comment(lib,"opencv_imgproc220d.lib")
  13.  
  14. //opencv için gerekli cv namespace ini ekliyoruz
  15. using namespace cv;
  16.  
  17. int main(int, char**)
  18. {
  19. //Gerekli değişkenleri tanımlıyoruz...
  20.  
  21.  
  22. int h_bins = 30, s_bins = 32;
  23. int hist_size[] = {h_bins, s_bins};
  24. float h_ranges[] = { 0, 180 };
  25. float s_ranges[] = { 0, 255 };
  26. float* ranges[] = { h_ranges, s_ranges };
  27. int scale = 10;
  28. float max_value = 1;
  29. float min_value = 0;
  30. float mean=0.0f;
  31. double variance=0;
  32. int i;
  33. int min_idx=0;
  34. int max_idx=1;
  35. //resimin bulunduğu yeri tanımlıyoruz daha sonra kullanırken resmin yolu yerine sadece bu pointer i kullanacağız ..
  36.  
  37.  
  38. //proje ile aynı yerde olduğu için yoluna sadece ismini giriyoruz....
  39.  
  40.  
  41. char* imageName = "desert.jpg";
  42. //resmimizin orjinal haini tutacak pointer ı oluşturup,resmi yüklüyoruz...
  43.  
  44.  
  45. IplImage* im = cvLoadImage(imageName, 1);
  46.  
  47. //resmimizin gri haini tutacak pointer ı oluşturuyoruz ve boyutlarını orjinal image'ımız ile anı olarak ayarlıyoruz..
  48.  
  49.  
  50. IplImage* grayImage = cvCreateImage(cvSize(im->width,im-> height),IPL_DEPTH_8U, 1);
  51. //resmimizi griye çeviriyoruz
  52.  
  53.  
  54. cvCvtColor(im, grayImage, CV_BGR2GRAY);
  55. //resmimizin binary(sadece siyah ve beyazdan oluşacak) pointeırımızı tanımlıyoruz,
  56. //boyutlarınıda gri imajdan alıyorum...(yani orjinal halinden  )
  57.  
  58.  
  59. IplImage* binaryImage = cvCreateImage(cvGetSize(grayImage),IPL_DEPTH_8U,1);
  60. //Resmimizi siyah beyaza çeviriyoruz...
  61.  
  62.  
  63. cvThreshold(grayImage, binaryImage, 128, 255, CV_THRESH_BINARY |   CV_THRESH_OTSU);
  64. //histogram için dikdörtgen oluşturuyoruz...
  65.  
  66.  
  67. CvRect rect = cvRect(0, 0, 500, 600 );
  68. //dikdortgenin ayarları resmin gri hali için uyguluyoruz...
  69.  
  70.  
  71. cvSetImageROI(grayImage, rect);
  72. //resim histogramı için pointer oluşturuoruz ve boyutlarını ayarlıyoruz...
  73.  
  74.  
  75. IplImage* histImage = cvCreateImage(cvSize(640,480), 8, 1);
  76. //resmin bilgilerini tutması için histogram oluşturuyoruz...
  77.  
  78.  
  79. CvHistogram* hist = cvCreateHist(1, &hist_size[0], CV_HIST_ARRAY,ranges, 1);
  80. //histogramı giri resim için uygulayıp hazırlıyoruz...
  81.  
  82.  
  83. cvCalcHist( &grayImage, hist, 0, NULL );
  84. //histogramın maximum ve minumum değerlerini hesaplıyoruz
  85.  
  86.  
  87. cvGetMinMaxHistValue( hist, &min_value, &max_value, &min_idx, &max_idx);
  88. //resim ölçeklendirilip resmimize uyduruyoruz...
  89.  
  90.  
  91. cvScale( hist->bins, hist->bins, ((double)histImage->height)/max_value, 0 );
  92.  
  93. //histogramımızın değerlerini 255 e ayarlıyoruz...
  94.  
  95.  
  96. cvSet( histImage, cvScalarAll(255), 0 );
  97. int bin_w = cvRound((double)histImage->width/hist_size[0]);
  98. for(int i = 0; i < hist_size[0]; i++ ) {
  99. //Histogramımızı çiziyoruz...
  100.  
  101.  
  102. cvRectangle( histImage, cvPoint(i*bin_w, histImage->height), cvPoint((i+1)*bin_w,histImage->height - cvRound(cvGetReal1D(hist->bins,i))),
  103. cvScalarAll(0), -1, 8, 0 );
  104. float* bins = cvGetHistValue_1D(hist,i);
  105. mean += bins[0];
  106. }
  107. mean /= hist_size[0];
  108. mean*=1.5;
  109. for( i = 0; i < hist_size[0]; i++ ) {
  110. float* bins = cvGetHistValue_1D(hist,i);
  111. variance += pow((bins[0] - mean),2);
  112. }
  113. variance /= hist_size[0];
  114. variance/=50;
  115.  
  116. //orta noktasını hesaplayacağımız resim iiçin pointer ve boyutlarını yapılandırıyoruz...
  117.  
  118. IplImage* middlePoint = cvCreateImage(cvSize(im->width,im->height), IPL_DEPTH_8U, 1);
  119. cvCvtColor(im, middlePoint, CV_BGR2GRAY);
  120.  
  121. CvPoint pt1 = cvPoint((mean-100),(variance-100));
  122. CvPoint pt2 = cvPoint(mean,variance);
  123. CvScalar red = CV_RGB(250,0,0);
  124. int thickness = 2;
  125. int connectivity = 8;
  126.  
  127. // çember özellikleri...
  128.  
  129. int radius = 20;
  130. CvScalar blue = CV_RGB(0,0,250);
  131.  
  132. // Yazı özellikleri
  133.  
  134.  
  135. const char* text = "orta nokta";
  136. double hscale = 1.0;
  137. double vscale = 0.8;
  138. double shear = 0.2;
  139. int thickness2 = 1;
  140. int line_type = 8;
  141.  
  142. CvFont font1;
  143. cvInitFont(&font1,CV_FONT_HERSHEY_DUPLEX,hscale,vscale,shear,thickness, line_type);
  144.  
  145. cvLine(middlePoint,pt1,pt2,red,thickness,connectivity);
  146. cvCircle(middlePoint,pt2,radius,blue,thickness,connectivity);
  147. cvPutText(middlePoint,text,pt1,&font1,blue);
  148.  
  149. //Açılacak dosyaların isimleri ve hangi dosyanın gösterileceği...
  150.  
  151.  
  152. cvNamedWindow("Original", 0);
  153. cvShowImage("Original", im );
  154.  
  155. cvNamedWindow("Gray", 0);
  156. cvShowImage("Gray", grayImage );
  157.  
  158. cvNamedWindow("Histogram", 0);
  159. cvShowImage("Histogram", histImage );
  160.  
  161. cvNamedWindow("Binary", 0);
  162. cvShowImage("Binary", binaryImage );
  163. cvNamedWindow("Middle Point", 0);
  164. cvShowImage("Middle Point", middlePoint);
  165.  
  166. cvWaitKey(0);
  167.  
  168. //Açılan pencerelerin yok edilmesi
  169.  
  170.  
  171. cvDestroyWindow( "Original" );
  172. cvDestroyWindow( "Gray" );
  173. cvDestroyWindow( "Histogram" );
  174. cvDestroyWindow( "Binary" );
  175. cvDestroyWindow( "Middle Point" );
  176. //Pointerların serbest bırakılması;
  177.  
  178.  
  179. cvReleaseImage( &im );
  180. cvReleaseImage( &histImage );
  181. cvReleaseImage( &grayImage );
  182. cvReleaseImage( &binaryImage );
  183. cvReleaseImage( &middlePoint );
  184.  
  185. return 0;
  186. }
Advertisement
Add Comment
Please, Sign In to add comment