/*
*@param descriptors: The descriptors of a block
*/
ImageImPro* HOGDetectorGPU::drawBlockHOG(vector<float> descriptors, cv::HOGDescriptor hog){
    int numHistograms = descriptors.size() / hog.nbins;
    cout << "Num histograms: " << numHistograms << endl;
    vector<float> normalized = normalize(descriptors);
    ImageImPro* ptrImage = NULL;
    int cellsPerRow = hog.blockSize.height / hog.cellSize.height;
    int cellsPerCol = hog.blockSize.width / hog.cellSize.width;
    int pixPerCellX = 32;
    int pixPerCellY = 32;
    ImSize size(cellsPerCol * pixPerCellY, cellsPerRow * pixPerCellX);

    ImageImPro* ptrTemp = new ImageImPro_OpenCvImpl( size, ImageImPro_OpenCvImpl::BIT_8_U, 1);
    Mat* ptrHistImage = ptrTemp->getMat();
    delete ptrTemp;
    int currHist = 0;
    for(int row = 0; row < cellsPerRow; ++row){
        for(int col = 0; col < cellsPerCol; ++col){
            vector <float> cellHistogram = getHistogramFromBlockDescriptor(normalized, currHist++, numHistograms, hog.nbins);
            cout << "Current histogram: " << currHist << endl;
            cv::Mat* ptrMat = getHistogramImage(cellHistogram);
            copyMat(*ptrHistImage, *ptrMat, row * pixPerCellX, col * pixPerCellY);
            delete ptrMat;
        }



    }
    ptrImage = new ImageImPro_OpenCvImpl(ptrHistImage);
    return ptrImage;
}
cv::Mat StrategyColorHistogram::ProcessAlgrithmIf(const cv::Mat &image)
{
    std::vector<cv::Mat> splitImages;
    cv::split(image, splitImages);

    if (splitImages.size() == 3)
    {
        cv::Mat blueImage = getHistogramImage(splitImages[0], cv::Scalar(255, 0, 0));
        cv::Mat greenImage = getHistogramImage(splitImages[1], cv::Scalar(0, 255, 0));
        cv::Mat redImage = getHistogramImage(splitImages[2], cv::Scalar(0, 0, 255));

        cv::namedWindow("blue");
        cv::imshow("blue", blueImage);

        cv::namedWindow("green");
        cv::imshow("green", greenImage);

        cv::namedWindow("red");
        cv::imshow("red", redImage);
    }

    return cv::Mat();
}