SlideShare ist ein Scribd-Unternehmen logo
1 von 11
OpenCV Tutorial Part II Loading Images and Using Histograms 29 November 2005 Gavin S Page  [email_address]
Tasks 29 November 2005 Gavin S Page  [email_address] The first step after establishing a working environment is to begin manipulating images. This tutorial will give an introduction to the usage of some basic functions. Steps Performed For explanations on any functions used here see the OpenCV documentat. Load an Image Calculate Histogram Values Calculate Basic Statistics Using Histogram Information
Loading the Image 29 November 2005 Gavin S Page  [email_address] //the name of the image being loaded char* imageName = &quot;Critters_00005.JPG&quot;; //Load the image and make sure that it loads correctly IplImage* im = cvLoadImage(imageName, -1); if( im == 0 ) { //Drop out if the image isn't found std::cerr << &quot;Failed to load: &quot; << imageName << std::endl; return 1; } OpenCV makes it relatively easy to load images. There are several syntax variations that simply take in the path/file name. One is presented here. Use the  cvLoadImage  function to assign the image to an  IplImage  pointer OpenCV uses an  IplImage  to represent image internally. Specify a File to be Loaded Load the File
Specifying a Working Region 29 November 2005 Gavin S Page  [email_address] In order to work with a histogram the image will have to converted to a single plane. //Create a single planed image of the same size as the original IplImage* grayImage = cvCreateImage(cvSize(im->width,im->height),  IPL_DEPTH_8U, 1); //convert the original image to gray cvCvtColor(im, grayImage, CV_BGR2GRAY); //create a rectangular area to evaluate CvRect rect = cvRect(0, 0, 500, 600 ); //apply the rectangle to the image and establish a region of interest cvSetImageROI(grayImage, rect); Convert the Image to Gray Specify a Rectangular Region of Interest (ROI) and apply it to the image The  cvCvtColor  function can be used to convert images to one of several color spaces. To restore the region of interest to the whole image the function  cvResetImageROI  is used Create an Image of  a Single Plane Create the Grayscale Image
Perform Initial Histogram Calculations 29 November 2005 Gavin S Page  [email_address] //create an image to hold the histogram IplImage* histImage = cvCreateImage(cvSize(320,200), 8, 1); //create a histogram to store the information from the image CvHistogram* hist =  cvCreateHist(1, &hist_size, CV_HIST_ARRAY, ranges, 1); //calculate the histogram and apply to hist cvCalcHist( &grayImage, hist, 0, NULL ); //grab the min and max values and their indeces cvGetMinMaxHistValue( hist, &min_value, &max_value, &min_idx, &max_idx); //scale the bin values so that they will fit in the image representation cvScale( hist->bins, hist->bins, ((double)histImage->height)/max_value, 0 ); //set all histogram values to 255 cvSet( histImage, cvScalarAll(255), 0 ); //create a factor for scaling along the width bin_w = cvRound((double)histImage->width/hist_size); OpenCV provides built-in functions to work with histograms. Calculate the Histogram Grab Min/Max Values Set Up Factors For Visualization Create a Histogram Image and a Histogram Create the Histogram Data
Prepare Visualization/Perform Calculations 29 November 2005 Gavin S Page  [email_address] for( i = 0; i < hist_size; i++ ) { //draw the histogram data onto the histogram image 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 ); //get the value at the current histogram bucket float* bins = cvGetHistValue_1D(hist,i); //increment the mean value mean += bins[0]; } //finish mean calculation mean /= hist_size; //go back through now that mean has been calculated in order to calculate variance for( i = 0; i < hist_size; i++ ) { float* bins = cvGetHistValue_1D(hist,i); variance += pow((bins[0] - mean),2); } //finish variance calculation variance /= hist_size; Here we will iterate across the histogram bins and apply the values to the image while calculating the statistics. Get Values/Perform Calculations Use  cvRectangle  to draw. Draw Values on Image
Display Results 29 November 2005 Gavin S Page  [email_address] std::cout << &quot;Histogram Mean: &quot; << mean << std::endl; std::cout << &quot;Variance: &quot; << variance << std::endl; std::cout << &quot;Standard Deviation: &quot; << sqrt(variance) << std::endl; //display the 3 images cvNamedWindow(&quot;Original&quot;, 0); cvShowImage(&quot;Original&quot;, im ); cvNamedWindow(&quot;Gray&quot;, 0); cvShowImage(&quot;Gray&quot;, grayImage ); cvNamedWindow(&quot;Histogram&quot;, 0); cvShowImage(&quot;Histogram&quot;, histImage ); //hold the images until a key is pressed cvWaitKey(0); This segment displays the visual and textural results. Hold For Input. Passing the parameter “0” waits for a keypress. Output Statistics Display cvNamedWindow  creates a container. The first parameter is the name and the second declares if the container is to expand to fit the contents. Show Images
Cleaning Up 29 November 2005 Gavin S Page  [email_address] //clean up images cvReleaseImage(&histImage); cvReleaseImage(&grayImage); cvReleaseImage(&im); //remove windows cvDestroyWindow(&quot;Original&quot;); cvDestroyWindow(&quot;Gray&quot;); cvDestroyWindow(&quot;Histogram&quot;); Release Images Destroy Containers It is very important to perform clean-up functions. It is easy for memory utilization to go out of control when multiple images are involved.
Results 29 November 2005 Gavin S Page  [email_address] Here are the original image, the grayscale region, and the histogram of that region.
Other Histogram Functions 29 November 2005 Gavin S Page  [email_address] ,[object Object],[object Object],[object Object],[object Object],[object Object]
Revision History 29 November 2005 Gavin S Page  [email_address] Initial Creation: 28 November 2005

Weitere ähnliche Inhalte

Was ist angesagt?

Two-StageCreation
Two-StageCreationTwo-StageCreation
Two-StageCreation
gillygize
 
computer notes - Data Structures - 25
computer notes - Data Structures - 25computer notes - Data Structures - 25
computer notes - Data Structures - 25
ecomputernotes
 

Was ist angesagt? (17)

Heap sort &amp; bubble sort
Heap sort &amp; bubble sortHeap sort &amp; bubble sort
Heap sort &amp; bubble sort
 
Python Programming Essentials - M24 - math module
Python Programming Essentials - M24 - math modulePython Programming Essentials - M24 - math module
Python Programming Essentials - M24 - math module
 
F(2)
F(2)F(2)
F(2)
 
gd
gdgd
gd
 
Two-StageCreation
Two-StageCreationTwo-StageCreation
Two-StageCreation
 
Of class1
Of class1Of class1
Of class1
 
Presentation template - jupyter2slides
Presentation template - jupyter2slidesPresentation template - jupyter2slides
Presentation template - jupyter2slides
 
Grand Central Dispatch
Grand Central DispatchGrand Central Dispatch
Grand Central Dispatch
 
Stop Programming in JavaScript By Luck
Stop Programming in JavaScript By LuckStop Programming in JavaScript By Luck
Stop Programming in JavaScript By Luck
 
Fat Arrow (ES6)
Fat Arrow (ES6)Fat Arrow (ES6)
Fat Arrow (ES6)
 
computer notes - Data Structures - 25
computer notes - Data Structures - 25computer notes - Data Structures - 25
computer notes - Data Structures - 25
 
Mopcon2017 - AppDevKit x CameraKit
Mopcon2017 - AppDevKit x CameraKitMopcon2017 - AppDevKit x CameraKit
Mopcon2017 - AppDevKit x CameraKit
 
Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)
Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)
Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)
 
Seaborn graphing present
Seaborn graphing presentSeaborn graphing present
Seaborn graphing present
 
A tour of Python
A tour of PythonA tour of Python
A tour of Python
 
Number
NumberNumber
Number
 
Data Types and Processing in ES6
Data Types and Processing in ES6Data Types and Processing in ES6
Data Types and Processing in ES6
 

Andere mochten auch

Perkembangan Teknologi Komunikasi 1
Perkembangan Teknologi Komunikasi 1Perkembangan Teknologi Komunikasi 1
Perkembangan Teknologi Komunikasi 1
Afril Wibisono
 
23.oktoobril oli koolis kadrilaat2
23.oktoobril oli koolis kadrilaat223.oktoobril oli koolis kadrilaat2
23.oktoobril oli koolis kadrilaat2
Annika Natka
 

Andere mochten auch (14)

Cv2009
Cv2009Cv2009
Cv2009
 
consumer newsletter
consumer newsletterconsumer newsletter
consumer newsletter
 
A Smiles Driven Invitation
A Smiles Driven InvitationA Smiles Driven Invitation
A Smiles Driven Invitation
 
Perkembangan Teknologi Komunikasi 1
Perkembangan Teknologi Komunikasi 1Perkembangan Teknologi Komunikasi 1
Perkembangan Teknologi Komunikasi 1
 
23.oktoobril oli koolis kadrilaat2
23.oktoobril oli koolis kadrilaat223.oktoobril oli koolis kadrilaat2
23.oktoobril oli koolis kadrilaat2
 
Open Cv Tutorial Ii
Open Cv Tutorial IiOpen Cv Tutorial Ii
Open Cv Tutorial Ii
 
Perkembangan Teknologi Komunikasi 2
Perkembangan Teknologi Komunikasi 2Perkembangan Teknologi Komunikasi 2
Perkembangan Teknologi Komunikasi 2
 
Presentation Of Items
Presentation Of ItemsPresentation Of Items
Presentation Of Items
 
Filetika 3
Filetika 3Filetika 3
Filetika 3
 
Testdellapersonalita3
Testdellapersonalita3Testdellapersonalita3
Testdellapersonalita3
 
Model / Portret
Model / PortretModel / Portret
Model / Portret
 
Filsafat Etika Komunikasi 2
Filsafat Etika Komunikasi 2Filsafat Etika Komunikasi 2
Filsafat Etika Komunikasi 2
 
Filsafat dan Etika Komunikasi
Filsafat dan Etika KomunikasiFilsafat dan Etika Komunikasi
Filsafat dan Etika Komunikasi
 
Presentasi telekomunikasi
Presentasi telekomunikasiPresentasi telekomunikasi
Presentasi telekomunikasi
 

Ähnlich wie Open Cv Tutorial Ii

A basic introduction to open cv for image processing
A basic introduction to open cv for image processingA basic introduction to open cv for image processing
A basic introduction to open cv for image processing
Chu Lam
 
I wanted to change the cloudsrectangles into an actuall image it do.pdf
I wanted to change the cloudsrectangles into an actuall image it do.pdfI wanted to change the cloudsrectangles into an actuall image it do.pdf
I wanted to change the cloudsrectangles into an actuall image it do.pdf
feelinggifts
 
openFrameworks 007 - graphics
openFrameworks 007 - graphicsopenFrameworks 007 - graphics
openFrameworks 007 - graphics
roxlu
 
Webgl para JavaScripters
Webgl para JavaScriptersWebgl para JavaScripters
Webgl para JavaScripters
gerbille
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)
Remy Sharp
 
Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02
PL dream
 
Client Side Programming with Applet
Client Side Programming with AppletClient Side Programming with Applet
Client Side Programming with Applet
backdoor
 
Displaying information within a window.68
Displaying information within a window.68Displaying information within a window.68
Displaying information within a window.68
myrajendra
 

Ähnlich wie Open Cv Tutorial Ii (20)

A basic introduction to open cv for image processing
A basic introduction to open cv for image processingA basic introduction to open cv for image processing
A basic introduction to open cv for image processing
 
Histogram dan Segmentasi
Histogram dan SegmentasiHistogram dan Segmentasi
Histogram dan Segmentasi
 
Histogram dan Segmentasi 2
Histogram dan Segmentasi 2Histogram dan Segmentasi 2
Histogram dan Segmentasi 2
 
Open Cv 2005 Q4 Tutorial
Open Cv 2005 Q4 TutorialOpen Cv 2005 Q4 Tutorial
Open Cv 2005 Q4 Tutorial
 
I wanted to change the cloudsrectangles into an actuall image it do.pdf
I wanted to change the cloudsrectangles into an actuall image it do.pdfI wanted to change the cloudsrectangles into an actuall image it do.pdf
I wanted to change the cloudsrectangles into an actuall image it do.pdf
 
Cpp tutorial
Cpp tutorialCpp tutorial
Cpp tutorial
 
openFrameworks 007 - graphics
openFrameworks 007 - graphicsopenFrameworks 007 - graphics
openFrameworks 007 - graphics
 
CE344L-200365-Lab5.pdf
CE344L-200365-Lab5.pdfCE344L-200365-Lab5.pdf
CE344L-200365-Lab5.pdf
 
Palestra - Utilizando tensorflow mobile e seus desafios
Palestra - Utilizando tensorflow mobile e seus desafiosPalestra - Utilizando tensorflow mobile e seus desafios
Palestra - Utilizando tensorflow mobile e seus desafios
 
Intro to computer vision in .net
Intro to computer vision in .netIntro to computer vision in .net
Intro to computer vision in .net
 
Webgl para JavaScripters
Webgl para JavaScriptersWebgl para JavaScripters
Webgl para JavaScripters
 
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)
 
Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02Is html5-ready-workshop-110727181512-phpapp02
Is html5-ready-workshop-110727181512-phpapp02
 
Client Side Programming with Applet
Client Side Programming with AppletClient Side Programming with Applet
Client Side Programming with Applet
 
Displaying information within a window.68
Displaying information within a window.68Displaying information within a window.68
Displaying information within a window.68
 
Getting more out of Matplotlib with GR
Getting more out of Matplotlib with GRGetting more out of Matplotlib with GR
Getting more out of Matplotlib with GR
 
Dip iit workshop
Dip iit workshopDip iit workshop
Dip iit workshop
 
aip shape detection and tracking using contours
aip shape detection and tracking using contoursaip shape detection and tracking using contours
aip shape detection and tracking using contours
 
Creating an Uber Clone - Part IV - Transcript.pdf
Creating an Uber Clone - Part IV - Transcript.pdfCreating an Uber Clone - Part IV - Transcript.pdf
Creating an Uber Clone - Part IV - Transcript.pdf
 

Kürzlich hochgeladen

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Kürzlich hochgeladen (20)

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 

Open Cv Tutorial Ii

  • 1. OpenCV Tutorial Part II Loading Images and Using Histograms 29 November 2005 Gavin S Page [email_address]
  • 2. Tasks 29 November 2005 Gavin S Page [email_address] The first step after establishing a working environment is to begin manipulating images. This tutorial will give an introduction to the usage of some basic functions. Steps Performed For explanations on any functions used here see the OpenCV documentat. Load an Image Calculate Histogram Values Calculate Basic Statistics Using Histogram Information
  • 3. Loading the Image 29 November 2005 Gavin S Page [email_address] //the name of the image being loaded char* imageName = &quot;Critters_00005.JPG&quot;; //Load the image and make sure that it loads correctly IplImage* im = cvLoadImage(imageName, -1); if( im == 0 ) { //Drop out if the image isn't found std::cerr << &quot;Failed to load: &quot; << imageName << std::endl; return 1; } OpenCV makes it relatively easy to load images. There are several syntax variations that simply take in the path/file name. One is presented here. Use the cvLoadImage function to assign the image to an IplImage pointer OpenCV uses an IplImage to represent image internally. Specify a File to be Loaded Load the File
  • 4. Specifying a Working Region 29 November 2005 Gavin S Page [email_address] In order to work with a histogram the image will have to converted to a single plane. //Create a single planed image of the same size as the original IplImage* grayImage = cvCreateImage(cvSize(im->width,im->height), IPL_DEPTH_8U, 1); //convert the original image to gray cvCvtColor(im, grayImage, CV_BGR2GRAY); //create a rectangular area to evaluate CvRect rect = cvRect(0, 0, 500, 600 ); //apply the rectangle to the image and establish a region of interest cvSetImageROI(grayImage, rect); Convert the Image to Gray Specify a Rectangular Region of Interest (ROI) and apply it to the image The cvCvtColor function can be used to convert images to one of several color spaces. To restore the region of interest to the whole image the function cvResetImageROI is used Create an Image of a Single Plane Create the Grayscale Image
  • 5. Perform Initial Histogram Calculations 29 November 2005 Gavin S Page [email_address] //create an image to hold the histogram IplImage* histImage = cvCreateImage(cvSize(320,200), 8, 1); //create a histogram to store the information from the image CvHistogram* hist = cvCreateHist(1, &hist_size, CV_HIST_ARRAY, ranges, 1); //calculate the histogram and apply to hist cvCalcHist( &grayImage, hist, 0, NULL ); //grab the min and max values and their indeces cvGetMinMaxHistValue( hist, &min_value, &max_value, &min_idx, &max_idx); //scale the bin values so that they will fit in the image representation cvScale( hist->bins, hist->bins, ((double)histImage->height)/max_value, 0 ); //set all histogram values to 255 cvSet( histImage, cvScalarAll(255), 0 ); //create a factor for scaling along the width bin_w = cvRound((double)histImage->width/hist_size); OpenCV provides built-in functions to work with histograms. Calculate the Histogram Grab Min/Max Values Set Up Factors For Visualization Create a Histogram Image and a Histogram Create the Histogram Data
  • 6. Prepare Visualization/Perform Calculations 29 November 2005 Gavin S Page [email_address] for( i = 0; i < hist_size; i++ ) { //draw the histogram data onto the histogram image 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 ); //get the value at the current histogram bucket float* bins = cvGetHistValue_1D(hist,i); //increment the mean value mean += bins[0]; } //finish mean calculation mean /= hist_size; //go back through now that mean has been calculated in order to calculate variance for( i = 0; i < hist_size; i++ ) { float* bins = cvGetHistValue_1D(hist,i); variance += pow((bins[0] - mean),2); } //finish variance calculation variance /= hist_size; Here we will iterate across the histogram bins and apply the values to the image while calculating the statistics. Get Values/Perform Calculations Use cvRectangle to draw. Draw Values on Image
  • 7. Display Results 29 November 2005 Gavin S Page [email_address] std::cout << &quot;Histogram Mean: &quot; << mean << std::endl; std::cout << &quot;Variance: &quot; << variance << std::endl; std::cout << &quot;Standard Deviation: &quot; << sqrt(variance) << std::endl; //display the 3 images cvNamedWindow(&quot;Original&quot;, 0); cvShowImage(&quot;Original&quot;, im ); cvNamedWindow(&quot;Gray&quot;, 0); cvShowImage(&quot;Gray&quot;, grayImage ); cvNamedWindow(&quot;Histogram&quot;, 0); cvShowImage(&quot;Histogram&quot;, histImage ); //hold the images until a key is pressed cvWaitKey(0); This segment displays the visual and textural results. Hold For Input. Passing the parameter “0” waits for a keypress. Output Statistics Display cvNamedWindow creates a container. The first parameter is the name and the second declares if the container is to expand to fit the contents. Show Images
  • 8. Cleaning Up 29 November 2005 Gavin S Page [email_address] //clean up images cvReleaseImage(&histImage); cvReleaseImage(&grayImage); cvReleaseImage(&im); //remove windows cvDestroyWindow(&quot;Original&quot;); cvDestroyWindow(&quot;Gray&quot;); cvDestroyWindow(&quot;Histogram&quot;); Release Images Destroy Containers It is very important to perform clean-up functions. It is easy for memory utilization to go out of control when multiple images are involved.
  • 9. Results 29 November 2005 Gavin S Page [email_address] Here are the original image, the grayscale region, and the histogram of that region.
  • 10.
  • 11. Revision History 29 November 2005 Gavin S Page [email_address] Initial Creation: 28 November 2005