Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //opencv için gerekli kütüphaneleri ekliyoruz
- #include <opencv\cv.h>
- #include <opencv\highgui.h>
- //linker ile gerekli bağlantıları yapıyoruz...
- #pragma comment(lib,"opencv_core220d.lib")
- #pragma comment(lib,"opencv_highgui220d.lib")
- #pragma comment(lib,"opencv_video220d.lib")
- #pragma comment(lib,"opencv_ml220d.lib")
- #pragma comment(lib,"opencv_legacy220d.lib")
- #pragma comment(lib,"opencv_imgproc220d.lib")
- //opencv için gerekli cv namespace ini ekliyoruz
- using namespace cv;
- int main(int, char**)
- {
- //Gerekli değişkenleri tanımlıyoruz...
- int h_bins = 30, s_bins = 32;
- int hist_size[] = {h_bins, s_bins};
- float h_ranges[] = { 0, 180 };
- float s_ranges[] = { 0, 255 };
- float* ranges[] = { h_ranges, s_ranges };
- int scale = 10;
- float max_value = 1;
- float min_value = 0;
- float mean=0.0f;
- double variance=0;
- int i;
- int min_idx=0;
- int max_idx=1;
- //resimin bulunduğu yeri tanımlıyoruz daha sonra kullanırken resmin yolu yerine sadece bu pointer i kullanacağız ..
- //proje ile aynı yerde olduğu için yoluna sadece ismini giriyoruz....
- char* imageName = "desert.jpg";
- //resmimizin orjinal haini tutacak pointer ı oluşturup,resmi yüklüyoruz...
- IplImage* im = cvLoadImage(imageName, 1);
- //resmimizin gri haini tutacak pointer ı oluşturuyoruz ve boyutlarını orjinal image'ımız ile anı olarak ayarlıyoruz..
- IplImage* grayImage = cvCreateImage(cvSize(im->width,im-> height),IPL_DEPTH_8U, 1);
- //resmimizi griye çeviriyoruz
- cvCvtColor(im, grayImage, CV_BGR2GRAY);
- //resmimizin binary(sadece siyah ve beyazdan oluşacak) pointeırımızı tanımlıyoruz,
- //boyutlarınıda gri imajdan alıyorum...(yani orjinal halinden )
- IplImage* binaryImage = cvCreateImage(cvGetSize(grayImage),IPL_DEPTH_8U,1);
- //Resmimizi siyah beyaza çeviriyoruz...
- cvThreshold(grayImage, binaryImage, 128, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
- //histogram için dikdörtgen oluşturuyoruz...
- CvRect rect = cvRect(0, 0, 500, 600 );
- //dikdortgenin ayarları resmin gri hali için uyguluyoruz...
- cvSetImageROI(grayImage, rect);
- //resim histogramı için pointer oluşturuoruz ve boyutlarını ayarlıyoruz...
- IplImage* histImage = cvCreateImage(cvSize(640,480), 8, 1);
- //resmin bilgilerini tutması için histogram oluşturuyoruz...
- CvHistogram* hist = cvCreateHist(1, &hist_size[0], CV_HIST_ARRAY,ranges, 1);
- //histogramı giri resim için uygulayıp hazırlıyoruz...
- cvCalcHist( &grayImage, hist, 0, NULL );
- //histogramın maximum ve minumum değerlerini hesaplıyoruz
- cvGetMinMaxHistValue( hist, &min_value, &max_value, &min_idx, &max_idx);
- //resim ölçeklendirilip resmimize uyduruyoruz...
- cvScale( hist->bins, hist->bins, ((double)histImage->height)/max_value, 0 );
- //histogramımızın değerlerini 255 e ayarlıyoruz...
- cvSet( histImage, cvScalarAll(255), 0 );
- int bin_w = cvRound((double)histImage->width/hist_size[0]);
- for(int i = 0; i < hist_size[0]; i++ ) {
- //Histogramımızı çiziyoruz...
- cvRectangle( histImage, cvPoint(i*bin_w, histImage->height), cvPoint((i+1)*bin_w,histImage->height - cvRound(cvGetReal1D(hist->bins,i))),
- cvScalarAll(0), -1, 8, 0 );
- float* bins = cvGetHistValue_1D(hist,i);
- mean += bins[0];
- }
- mean /= hist_size[0];
- mean*=1.5;
- for( i = 0; i < hist_size[0]; i++ ) {
- float* bins = cvGetHistValue_1D(hist,i);
- variance += pow((bins[0] - mean),2);
- }
- variance /= hist_size[0];
- variance/=50;
- //orta noktasını hesaplayacağımız resim iiçin pointer ve boyutlarını yapılandırıyoruz...
- IplImage* middlePoint = cvCreateImage(cvSize(im->width,im->height), IPL_DEPTH_8U, 1);
- cvCvtColor(im, middlePoint, CV_BGR2GRAY);
- CvPoint pt1 = cvPoint((mean-100),(variance-100));
- CvPoint pt2 = cvPoint(mean,variance);
- CvScalar red = CV_RGB(250,0,0);
- int thickness = 2;
- int connectivity = 8;
- // çember özellikleri...
- int radius = 20;
- CvScalar blue = CV_RGB(0,0,250);
- // Yazı özellikleri
- const char* text = "orta nokta";
- double hscale = 1.0;
- double vscale = 0.8;
- double shear = 0.2;
- int thickness2 = 1;
- int line_type = 8;
- CvFont font1;
- cvInitFont(&font1,CV_FONT_HERSHEY_DUPLEX,hscale,vscale,shear,thickness, line_type);
- cvLine(middlePoint,pt1,pt2,red,thickness,connectivity);
- cvCircle(middlePoint,pt2,radius,blue,thickness,connectivity);
- cvPutText(middlePoint,text,pt1,&font1,blue);
- //Açılacak dosyaların isimleri ve hangi dosyanın gösterileceği...
- cvNamedWindow("Original", 0);
- cvShowImage("Original", im );
- cvNamedWindow("Gray", 0);
- cvShowImage("Gray", grayImage );
- cvNamedWindow("Histogram", 0);
- cvShowImage("Histogram", histImage );
- cvNamedWindow("Binary", 0);
- cvShowImage("Binary", binaryImage );
- cvNamedWindow("Middle Point", 0);
- cvShowImage("Middle Point", middlePoint);
- cvWaitKey(0);
- //Açılan pencerelerin yok edilmesi
- cvDestroyWindow( "Original" );
- cvDestroyWindow( "Gray" );
- cvDestroyWindow( "Histogram" );
- cvDestroyWindow( "Binary" );
- cvDestroyWindow( "Middle Point" );
- //Pointerların serbest bırakılması;
- cvReleaseImage( &im );
- cvReleaseImage( &histImage );
- cvReleaseImage( &grayImage );
- cvReleaseImage( &binaryImage );
- cvReleaseImage( &middlePoint );
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment