opencv讀取RGB長條圖

來源:互聯網
上載者:User
// text.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "highgui.h"#include "cv.h"#include "cxcore.h"#include <iostream>//#include <math.h> using namespace std;void main(int argc,char** argv){IplImage *src = cvLoadImage("de.png",1);//IplImage *hsv= cvCreateImage(cvGetSize(src),8,3);//cvCvtColor(src,hsv,CV_RGB2HSV);IplImage* r_plane = cvCreateImage(cvGetSize(src),8,1);IplImage* g_plane = cvCreateImage(cvGetSize(src),8,1);IplImage* b_plane = cvCreateImage(cvGetSize(src),8,1);//IplImage* planes[] = {h_plane,s_plane};cvCvtPixToPlane(src,b_plane,g_plane,r_plane,0);//openCV裡面的一個函數,可以看作cvSplit是他的宏:#define cvCvtPixToPlane cvSplit                                                //注意順序為BGR,OpenCV中不管是Windows中Load的還是網路攝影機取得的都是BGR順序排列的//計算長條圖//int h_bins = 100,s_bins = 32;int hist_size = 100;int hist_height = 100;float range[] = {0,255};float* ranges[] = {range};CvHistogram* r_hist = cvCreateHist(1,&hist_size,CV_HIST_ARRAY,ranges,1);CvHistogram* g_hist = cvCreateHist(1,&hist_size,CV_HIST_ARRAY,ranges,1);CvHistogram* b_hist = cvCreateHist(1,&hist_size,CV_HIST_ARRAY,ranges,1);cvCalcHist(&r_plane,r_hist,0,0);cvNormalizeHist(r_hist,1.0);cvCalcHist(&g_plane,g_hist,0,0);cvNormalizeHist(g_hist,1.0);cvCalcHist(&b_plane,b_hist,0,0);cvNormalizeHist(b_hist,1.0);//建立映像繪製長條圖int scale = 2;IplImage* hist_img = cvCreateImage(cvSize(hist_size*scale,hist_height*3),8,3);cvZero(hist_img);//繪製矩形表示長條圖float max_valr = 0,max_valg = 0,max_valb = 0;cvGetMinMaxHistValue(r_hist,0,&max_valr,0,0);cvGetMinMaxHistValue(g_hist,0,&max_valg,0,0);cvGetMinMaxHistValue(b_hist,0,&max_valb,0,0);for(int i = 0;i<hist_size;i++){float bin_val = cvQueryHistValue_1D(r_hist,i);int intensity = cvRound(bin_val*hist_height/max_valr);  //int cvRound (double value)對一個double型的數進行四捨五入,並返回一個整型數!cvRectangle(hist_img,cvPoint(i*scale,hist_height),cvPoint((i+1)*scale-1,hist_height-intensity),CV_RGB(255,0,0));}for(int i = 0;i<hist_size;i++){float bin_val = cvQueryHistValue_1D(g_hist,i);int intensity = cvRound(bin_val*hist_height/max_valg);  //int cvRound (double value)對一個double型的數進行四捨五入,並返回一個整型數!cvRectangle(hist_img,cvPoint(i*scale,2*hist_height),cvPoint((i+1)*scale-1,2*hist_height-intensity),CV_RGB(0,255,0));}for(int i = 0;i<hist_size;i++){float bin_val = cvQueryHistValue_1D(b_hist,i);int intensity = cvRound(bin_val*hist_height/max_valb);  //int cvRound (double value)對一個double型的數進行四捨五入,並返回一個整型數!cvRectangle(hist_img,cvPoint(i*scale,3*hist_height),cvPoint((i+1)*scale-1,3*hist_height-intensity),CV_RGB(0,0,255));}cvNamedWindow("histogram",1);cvShowImage("histogram",hist_img);cvNamedWindow("src",1);cvShowImage("src",src);//cvNamedWindow("hsv",1);//cvShowImage("hsv",hsv);cvWaitKey(0);cvDestroyWindow("src");cvReleaseImage(&src);cvDestroyWindow("r_plane");cvReleaseImage(&r_plane);cvDestroyWindow("g_plane");cvReleaseImage(&r_plane);cvDestroyWindow("g_plane");cvReleaseImage(&b_plane);cvDestroyWindow("b_plane");cvReleaseImage(&src);cvDestroyWindow("histogram");cvReleaseImage(&hist_img);}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.