C++ 图像RGB直方图特征提取

来源:互联网 发布:vb冒泡排序法 编辑:程序博客网 时间:2024/05/18 08:42
int  ImageDeal::imgRGBHist( std::vector<float> &features, IplImage* src, int R_bins, int G_bins, int B_bins ){   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[] = { r_plane, g_plane, b_plane };    int hist_size[] = {R_bins, G_bins, B_bins};  //特征维数:R_bins× G_bins× B_bins   float r_ranges[] = { 0, 255 };    float g_ranges[] = { 0, 255 };   float b_ranges[] = { 0, 255 };   float* ranges[] = { r_ranges, g_ranges, b_ranges };   cvCvtPixToPlane( src, r_plane, g_plane, b_plane, 0 );   CvHistogram * hist = cvCreateHist( 3, hist_size, CV_HIST_ARRAY, ranges, 1 );   cvClearHist(hist);     cvCalcHist( planes, hist, 0, 0 );   features.clear();   for(int r = 0; r < R_bins; r++)   {   for(int g = 0; g < G_bins; g++)   {   for(int b = 0; b < B_bins; b++)   {   int i = r * G_bins * B_bins + g * B_bins + b;   float bin_val = cvQueryHistValue_3D( hist, r, g , b );     features.push_back(bin_val);   }   }   }   //features normalization   float ymax = 1;    float ymin = 0;   float dMaxValue = *max_element(features.begin(),features.end());       float dMinValue = *min_element(features.begin(),features.end());       //save features    for (int f = 0; f < features.size(); ++f){   features[f] = (ymax-ymin)*(features[f]-dMinValue)/(dMaxValue-dMinValue+1e-8)+ymin;   }   return 0;}


代码下载链接:

C++ 图像RGB直方图特征提取

0 0
原创粉丝点击