CV_EXPORTS void calcHist( const Mat* images,
int nimages,
const int* channels,
InputArray mask,
OutputArray hist,
int dims,
const int* histSize,
const float** ranges,
bool uniform=true,
bool accumulate=false );
åæ°1表示éè¦ç¨æ¥è®¡ç®ç´æ¹å¾çæºå¾ååºåï¼å æ¤å¯ä»¥å
许æå¤å¼ 大å°ä¸æ ·ï¼æ°æ®ç±»åç¸åçå¾å被ç¨æ¥ç»è®¡å
¶ç´æ¹å¾ç¹å¾ã
ããåæ°2表示çå°±æ¯ä½¿ç¨å¤å°å¼ å¾ååºåä¸çå¾åç¨äºè®¡ç®ç´æ¹å¾ã
ããåæ°3çåºç°ä¸»è¦æ¯èèå°è¾å
¥çæ¯ä¸å¼ å¾åæå¯è½æ¯å¤ééçï¼æ¯å¦è¯´RGBå¾å°±æ¯3ééçï¼é£ä¹ä»ç»è®¡æä¹ä¸æ¥è®²ï¼
ä¸å¼ RGBå¾å
¶å®å°±æ¯3å¼ åééçå¾åï¼è计ç®ç´æ¹å¾æ¶å
¶æ¬è´¨ä¹æ¯é对åå¼ å¾åè¿è¡çãè¿éè½ç¶æ们è¾å
¥çå¾ååºåimagesä¸æå¾å¤å¾çï¼ä½æ¯å¹¶ä¸æ¯
æ¯ä¸å¼ å¾ççæ¯ä¸ä¸ªééé½ä¼è¢«ç¨æ¥è®¡ç®ãæ以åæ°3çåè½æ¯æå®åªäºééçå¾å被ç¨æ¥è®¡ç®ï¼åé¢ç解éé½å设å¾ååºåä¸å¾åæ¯3ééçï¼é£ä¹æçå¾åå¯è½
æå¤ä¸ªééé½è¢«ç¨æ¥è®¡ç®ï¼æçå¾åå¯è½è¿ä¸ä¸ªééé½æ²¡æ被éç¨ï¼ï¼è¿æ¶åæ°3éé¢ä¿åçæ¯ééçåºå·ï¼é£ä¹å¾ååºåimagesä¸ç第ä¸å¼ å¾ççééåºå·
ï¼å设å¾åæ¶3ééçï¼ä¸º0,1,2ï¼imagesä¸ç¬¬äºå¼ å¾ççå¾ååºåæ¥çä¸ä¸æ¬¡çï¼ä¸º3,4,5,ï¼ä¾æ¬¡ç±»æ¨å³å¯ã
ããåæ°4æ¯maskæ©èæä½ï¼å³æå®æ¯å¼ å¾ççåªäºåç´ è¢«ç¨äºè®¡ç®ç´æ¹å¾ï¼è¿ä¸ªæ©èç©éµä¸è½å¤é对ç¹å®å¾å设å®ç¹å®çæ©èï¼å æ¤å¨è¿éæ¯ä¸è§åä»å¯¹å¾
çã
ããåæ°5æ¯ä¿å计ç®çç´æ¹å¾ç»æçç©éµï¼æå¯è½æ¯å¤ç»´ç©éµã
ããåæ°6æ¯éè¦è®¡ç®çç´æ¹å¾çç»´æ°ã
ããåæ°7æ¯æé计ç®ç´æ¹å¾çæ¯ä¸ç»´ç大å°ï¼å³æ¯ä¸ç»´binç个æ°ã
ããåæ°8æ¯æé计ç®ç´æ¹å¾çæ¯ä¸ç»´çèå´ï¼å¦æåæ°9çuniform为trueï¼è¿æ¤æ¶çåæ°8ç大å°ä¸º2ï¼éé¢ç
å
ç´ å¼è¡¨ç¤ºçæ¯æ¯ä¸ç»´çä¸ä¸éè¿ä¸¤ä¸ªæ°åï¼å¦æåæ°9çuniform为falseï¼åæ¤æ¶çåæ°8ç大å°ä¸ºbinç个æ°ï¼å³åæ°7çå¼ï¼åæ°8éé¢çå
ç´ å¼éè¦äººä¸ºçæå®ï¼å³æ¯ä¸ç»´çåæ å¼ä¸ä¸å®æ¯ååçï¼éè¦äººä¸ºæå®ã
ããåæ°9å¦æ为trueçè¯ï¼å说ææé计ç®çç´æ¹å¾çæ¯ä¸ç»´æç
§å®çèå´å尺寸大å°åååå¼ï¼å¦æ为falseçè¯ï¼è¯´æç´æ¹å¾çæ¯ä¸ç»´ä¸æ¯åååå¸åå¼çï¼åèåæ°8ç解éã
ããåæ°10å¦æ为falseï¼å表示ç´æ¹å¾è¾åºç©éµhistå¨ä½¿ç¨è¯¥å½æ°çæ¶å被æ¸
0äºï¼å¦æ为trueï¼å表示histå¨ä½¿ç¨calcHist()å½æ°æ¶æ²¡æ被æ¸
0ï¼è®¡ç®çç»æä¼ç´¯å å°åä¸æ¬¡ä¿åçå¼ä¸ã
ãã使ç¨è¯¥å½æ°çæ¶åéè¦æ³¨æï¼å¦æå¨é»è®¤åæ°çæ
åµä¸uniform = true,åæ¤æ¶çranges大å°å¿
é¡»æ¯histSize大å°ç两åï¼å¹¶ä¸channelsç大å°å¿
é¡»çäºdimsç»´æ°ã
ããä»ä¸é¢å¯ä»¥ç解ï¼channelséçå¼å·²ç»æå®äºä½¿ç¨åªäºåééçå¾åæ¥è®¡ç®ç®æ ç´æ¹å¾ï¼å æ¤ä¸æ¦channelsç尺寸确å®ï¼å对åºçç´æ¹å¾çç»´æ°ä¹å°±ç¡®å®äºï¼æ以æ们ä¸è½ä½¿ç¨å¤å¼ å¾åæ¥è®¡ç®ä¸ä¸ªä¸ç»´çç´æ¹å¾ã
以ä¸å
容æ¥èªï¼åºç¡å¦ä¹ ç¬è®°ä¹opencv(19)ï¼æå
³å¾ååºåçç´æ¹å¾è®¡ç®
[cpp] view plain copy print?
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
using namespace std;
using namespace cv;
/** @å½æ° main */
int main( int argc, char** argv )
{
Mat src, dst;
/// è£
è½½å¾å
src = imread( argv[1], 1 );
if( !src.data )
{ return -1; }
/// åå²æ3个åééå¾å ( R, G å B )
vector<Mat> rgb_planes;
split( src, rgb_planes );
/// 设å®binæ°ç®
int histSize = 255;
/// 设å®åå¼èå´ ( R,G,B) )
float range[] = { 0, 255 } ;
const float* histRange = { range };
bool uniform = true; bool accumulate = false;
Mat r_hist, g_hist, b_hist;
/// 计ç®ç´æ¹å¾:
calcHist( &rgb_planes[0], 1, 0, Mat(), r_hist, 1, &histSize, &histRange, uniform, accumulate );
calcHist( &rgb_planes[1], 1, 0, Mat(), g_hist, 1, &histSize, &histRange, uniform, accumulate );
calcHist( &rgb_planes[2], 1, 0, Mat(), b_hist, 1, &histSize, &histRange, uniform, accumulate );
// å建ç´æ¹å¾ç»å¸
int hist_w = 400; int hist_h = 400;
int bin_w = cvRound( (double) hist_w/histSize );
Mat histImage( hist_w, hist_h, CV_8UC3, Scalar( 0,0,0) );
/// å°ç´æ¹å¾å½ä¸åå°èå´ [ 0, histImage.rows ]
normalize(r_hist, r_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat() );
normalize(g_hist, g_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat() );
normalize(b_hist, b_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat() );
/// å¨ç´æ¹å¾ç»å¸ä¸ç»åºç´æ¹å¾
for( int i = 1; i < histSize; i++ )
{
line( histImage, Point( bin_w*(i-1), hist_h - cvRound(r_hist.at<float>(i-1)) ) ,
Point( bin_w*(i), hist_h - cvRound(r_hist.at<float>(i)) ),
Scalar( 0, 0, 255), 2, 8, 0 );
line( histImage, Point( bin_w*(i-1), hist_h - cvRound(g_hist.at<float>(i-1)) ) ,
Point( bin_w*(i), hist_h - cvRound(g_hist.at<float>(i)) ),
Scalar( 0, 255, 0), 2, 8, 0 );
line( histImage, Point( bin_w*(i-1), hist_h - cvRound(b_hist.at<float>(i-1)) ) ,
Point( bin_w*(i), hist_h - cvRound(b_hist.at<float>(i)) ),
Scalar( 255, 0, 0), 2, 8, 0 );
}
/// æ¾ç¤ºç´æ¹å¾
namedWindow("calcHist Demo", CV_WINDOW_AUTOSIZE );
imshow("calcHist Demo", histImage );
waitKey(0);
return 0;
}
温馨提示:答案为网友推荐,仅供参考