/* *@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(); }